你如何计算dict
Python 中两个对象的并集,如果(key, value)
结果中存在一对,如果key
是in
dict (除非有重复)?
例如,和的{'a' : 0, 'b' : 1}
并集{'c' : 2}
是{'a' : 0, 'b' : 1, 'c' : 2}
。
最好您可以在不修改任一输入的情况下执行此操作dict
。有用的示例:获取当前范围内所有变量及其值的字典
你如何计算dict
Python 中两个对象的并集,如果(key, value)
结果中存在一对,如果key
是in
dict (除非有重复)?
例如,和的{'a' : 0, 'b' : 1}
并集{'c' : 2}
是{'a' : 0, 'b' : 1, 'c' : 2}
。
最好您可以在不修改任一输入的情况下执行此操作dict
。有用的示例:获取当前范围内所有变量及其值的字典
这个问题提供了一个成语。您使用其中一个 dicts 作为dict()
构造函数的关键字参数:
dict(y, **x)
重复解决有利于x
; 例如
dict({'a' : 'y[a]'}, **{'a', 'x[a]'}) == {'a' : 'x[a]'}
您也可以使用update
dict 的方法,例如
a = {'a' : 0, 'b' : 1}
b = {'c' : 2}
a.update(b)
print a
对于静态字典,结合其他字典的快照:
从 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
>>>
注意:如果想要懒惰地维护两个或多个字典的联合“视图”,请检查 collections.ChainMap
标准库 - 因为它具有所有字典方法并涵盖上面示例中未考虑的极端情况。
两本词典
def union2(dict1, dict2):
return dict(list(dict1.items()) + list(dict2.items()))
词典_
def union(*dicts):
return dict(itertools.chain.from_iterable(dct.items() for dct in dicts))