merging Python dictionaries

前端 未结 4 1999
时光说笑
时光说笑 2020-11-27 04:40

I am trying to merge the following python dictionaries as follow:

dict1= {\'paul\':100, \'john\':80, \'ted\':34, \'herve\':10}
dict2 = {\'paul\':\'a\', \'joh         


        
相关标签:
4条回答
  • 2020-11-27 05:27

    In Python2.7 or Python3.1 you can easily generalise to work with any number of dictionaries using a combination of list, set and dict comprehensions!

    >>> dict1 = {'paul':100, 'john':80, 'ted':34, 'herve':10}
    >>> dict2 = {'paul':'a', 'john':'b', 'ted':'c', 'peter':'d'}
    >>> dicts = dict1,dict2
    >>> {k:[d.get(k) for d in dicts] for k in {k for d in dicts for k in d}}
    {'john': [80, 'b'], 'paul': [100, 'a'], 'peter': [None, 'd'], 'ted': [34, 'c'], 'herve': [10, None]}
    

    Python2.6 doesn't have set comprehensions or dict comprehensions

    >>> dict1 = {'paul':100, 'john':80, 'ted':34, 'herve':10}
    >>> dict2 = {'paul':'a', 'john':'b', 'ted':'c', 'peter':'d'}
    >>> dicts = dict1,dict2
    >>> dict((k,[d.get(k) for d in dicts]) for k in set(k for d in dicts for k in d))
    {'john': [80, 'b'], 'paul': [100, 'a'], 'peter': [None, 'd'], 'ted': [34, 'c'], 'herve': [10, None]}
    
    0 讨论(0)
  • 2020-11-27 05:31

    This will work:

    {k: [dict1.get(k), dict2.get(k)] for k in set(dict1.keys() + dict2.keys())}
    

    Output:

    {'john': [80, 'b'], 'paul': [100, 'a'], 'peter': [None, 'd'], 'ted': [34, 'c'], 'herve': [10, None]}
    
    0 讨论(0)
  • 2020-11-27 05:35

    In Python3.1,

    output = {k:[dict1.get(k),dict2.get(k)] for k in dict1.keys() | dict2.keys()}
    In Python2.6,
    output = dict((k,[dict1.get(k),dict2.get(k)]) for k in set(dict1.keys() + dict2.keys()))

    0 讨论(0)
  • 2020-11-27 05:36
    output = {k: [dict1[k], dict2.get(k)] for k in dict1}
    output.update({k: [None, dict2[k]] for k in dict2 if k not in dict1})
    
    0 讨论(0)
提交回复
热议问题