如何计算Python中两个dict
对象的并集,其中结果中存在(key, value)
对,iff key
为in
dict(除非那里)重复)?
例如,{'a' : 0, 'b' : 1}
和{'c' : 2}
的联合为{'a' : 0, 'b' : 1, 'c' : 2}
。
最好不要修改输入dict
即可。这有用的示例:Get a dict of all variables currently in scope and their values
答案 0 :(得分:87)
This question提供了一个成语。您使用其中一个dicts作为dict()
构造函数的关键字参数:
dict(y, **x)
解决重复项以支持x
中的值;例如
dict({'a' : 'y[a]'}, **{'a', 'x[a]'}) == {'a' : 'x[a]'}
答案 1 :(得分:77)
答案 2 :(得分:24)
两个词典
def union2(dict1, dict2):
return dict(list(dict1.items()) + list(dict2.items()))
n 词典
def union(*dicts):
return dict(itertools.chain.from_iterable(dct.items() for dct in dicts))
答案 3 :(得分:8)
如果您需要两个dicts保持独立且可更新,则可以创建一个对象,在其__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
>>>