合并Python词典

合并Python词典,python,list,dictionary,data-structures,merge,Python,List,Dictionary,Data Structures,Merge,我正在尝试合并以下python词典,如下所示: dict1= {'paul':100, 'john':80, 'ted':34, 'herve':10} dict2 = {'paul':'a', 'john':'b', 'ted':'c', 'peter':'d'} output = {'paul':[100,'a'], 'john':[80, 'b'], 'ted':[34,'c'], 'peter':[None, 'd'],

我正在尝试合并以下python词典,如下所示:

dict1= {'paul':100, 'john':80, 'ted':34, 'herve':10}
dict2 = {'paul':'a', 'john':'b', 'ted':'c', 'peter':'d'}

output = {'paul':[100,'a'],
          'john':[80, 'b'],
          'ted':[34,'c'],
          'peter':[None, 'd'],
          'herve':[10, None]}
有没有一种有效的方法可以做到这一点?

这将有效:

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})
{k: [dict1.get(k), dict2.get(k)] for k in set(dict1.keys() + dict2.keys())}
输出:

{'john': [80, 'b'], 'paul': [100, 'a'], 'peter': [None, 'd'], 'ted': [34, 'c'], 'herve': [10, None]}
在Python3.1中,
output={k:[dict1.get(k),dict2.get(k)],用于dict1.keys()| dict2.keys()}
在Python2.6中,

output=dict((k,[dict1.get(k),dict2.get(k)])表示集合中的k(dict1.keys()+dict2.keys())
Python2.7Python3.1中,您可以轻松地使用列表、集合和dict理解的组合来概括使用任意数量的词典

>>> 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没有集合理解或听写理解

>>> 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]}

我希望保留两个词典中的所有关键字。请不要对您自己的问题添加注释。这是你的问题。您可以更新问题,使其正确。评论供其他人对您的问题发表评论。提问应该适合你的需要。稍微格式化一下会有很大帮助。尝试编辑您的问题:选择代码并单击编辑窗口中的“101 010”按钮。另外,将dict1和dict2分开成两行。另请参见:py3k也有dict理解;)@傻鬼,我也这么想。想象一下当我看到你的评论时我的惊讶:)它在3.1中非常简洁,你能详细解释一下为什么这样做吗?传递给
dict()
update()
的对象是什么?它是一个生成器吗?@Heisenberg,它们是生成器表达式(又名“genexp”s),与“列表理解”(又名“listcomp”s)等价的生成器——一种使生成器在线的简便方法(与等效的listcomp相比,如果以后不需要该列表,则节省了短暂的内存使用——因为
dict
update
都只需要某种迭代器,生成2项元组作为
(键,值)
)。
>>> 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]}
>>> 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]}