对于静态字典,可以合并其他字典的快照:
从Python 3.9开始,定义了二进制“或”运算符|
用于连接字典(会立即创建一个新的具体字典):
>>> a = {"a":1}
>>> b = {"b":2}
>>> a|b
{'a': 1, 'b': 2}
相反地,|=
增强赋值已经被实现为与调用 update
方法相同:
>>> a = {"a":1}
>>> a |= {"b": 2}
>>> a
{'a': 1, 'b': 2}
更多细节请查看PEP-584
在Python 3.9之前,创建新字典的简单方法是使用“星号展开”方式,直接添加每个子字典的内容:
c = {**a, **b}
对于动态字典组合,作为“视图”来组合、实时的字典:
如果你需要两个字典保持独立,而且可更新,你可以创建一个单一对象,在它的__getitem__
方法中查询这两个字典(并实现get
,__contains__
和其他映射方法,根据需要)。
一个极简示例可以是这样的:
class UDict(object):
def __init__(self, d1, d2):
self.d1, self.d2 = d1, d2
def __getitem__(self, item):
if item in self.d1:
return self.d1[item]
return self.d2[item]
而且它可以正常工作:
>>> a = UDict({1:1}, {2:2})
>>> a[2]
2
>>> a[1]
1
>>> a[3]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 7, in __getitem__
KeyError: 3
>>>
NB:如果想懒惰地维护两个或多个字典的联合视图,请查看标准库中的collections.ChainMap
- 它具有所有字典方法,并涵盖了上面示例未考虑到的角落情况。
**d2
的语法是什么。它碰巧也提供了对这个问题的答案。 - Mechanical snail{**dict1, **dict2}
将两个字典合并为一个字典。这种方法比其他解决方案更可靠,因为它无论键是什么类型都可以正常工作,而不会出现错误。 - Nathanmerged_dict = dict(**a,**b,**c,**d)
对我也起作用了。 - Charlie Parkera = {1: 'a', 2: 'b', 3: 'c'}; b = {4: 'd', 5: 'e'}; c = a | b
Python 3.9:a = {1: 'a', 2: 'b', 3: 'c'}; b = {4: 'd', 5: 'e'}; c = a | b
- Pygirl{**d1, **d2}
。详情请参考:https://dev59.com/43VD5IYBdhLWcg3wQJOT - Charlie Parker