我有两个Python字典,我想编写一个返回这两个字典的表达式,合并.update()如果它返回结果而不是就地修改dict,那么该方法将是我需要的.
>>> x = {'a': 1, 'b': 2}
>>> y = {'b': 10, 'c': 11}
>>> z = x.update(y)
>>> print(z)
None
>>> x
{'a': 1, 'b': 10, 'c': 11}
Run Code Online (Sandbox Code Playgroud)
我怎样才能获得最终合并的词典z,不是x吗?
(要清楚的是,最后一次胜利的冲突处理dict.update()也是我正在寻找的.)
我有两个现有的词典,我希望将其中一个词典"追加"到另一个词典中.我的意思是,其他字典的关键值应该被制作成第一个字典.例如:
orig = {
'A': 1,
'B': 2,
'C': 3,
}
extra = {
'D': 4,
'E': 5,
}
dest = # something here involving orig and extra
print dest
{
'A': 1,
'B': 2,
'C': 3,
'D': 4,
'E': 5
}
Run Code Online (Sandbox Code Playgroud)
我认为这一切都可以通过for循环实现(也许?),但是有一些字典方法或任何其他模块可以为我保存这份工作吗?我正在使用的实际词典真的很大......
在Python 3.3中,一个ChainMap类被添加到collections模块中:
提供了一个ChainMap类,用于快速链接多个映射,以便将它们视为一个单元.它通常比创建新字典和运行多个update()调用快得多.
例:
>>> from collections import ChainMap
>>> x = {'a': 1, 'b': 2}
>>> y = {'b': 10, 'c': 11}
>>> z = ChainMap(y, x)
>>> for k, v in z.items():
print(k, v)
a 1
c 11
b 10
Run Code Online (Sandbox Code Playgroud)
据我所知,它是一个替代,有一个额外的字典,并用update()s 维护它.
问题是:
ChainMap包括哪些用例?ChainMap吗?额外问题:有没有办法在Python2.x上使用它?
我在Transforming Code into Beautiful, Idiomatic PythonRayCon Hettinger的PyCon演讲中听说过它,我想将它添加到我的工具包中,但我不知道何时应该使用它.
可能重复:
Python"扩展"字典
我知道可以追加或扩展Python列表.有没有一种简单的方法可以将两个Python字典与唯一键组合在一起,例如:
basket_one = {'fruit': 'watermelon', 'veggie': 'pumpkin'}
basket_two = {'dairy': 'cheese', 'meat': 'turkey'}
Run Code Online (Sandbox Code Playgroud)
然后我想要一大篮子的食物:
basket = {
'fruit': 'watermelon',
'veggie': 'pumpkin',
'dairy': 'cheese',
'meat': 'turkey'
}
Run Code Online (Sandbox Code Playgroud)
如何在Python中执行上述操作?
我有两本词典.
a = {"ab":3, "bd":4}
b = {"cd":3, "ed":5}`
Run Code Online (Sandbox Code Playgroud)
我想把它们结合起来{'bd': 4, 'ab': 3, 'ed': 5, 'cd': 3}.
由于此说,a.update(b)可以完成它.但是当我尝试时,我得到:
type(a.update(b)) #--> type 'NoneType'
Run Code Online (Sandbox Code Playgroud)
有谁愿意向我解释为什么我不能获得字典类型?
我也试过这个,它做得很好:
type(dict(a,**b)) #-->type 'dict'
Run Code Online (Sandbox Code Playgroud)
这两种方法有什么区别,为什么第一种方法不起作用?