Python中的dict对象联合

如何计算Python中两个dict对象的联合,其中(key, value)对在结果中是否存在iff key (除非有重复)?

例如, {'a' : 0, 'b' : 1}{'c' : 2}{'a' : 0, 'b' : 1, 'c' : 2}

最好你可以做到这一点,而不修改任何inputdict 。 这是有用的示例: 获取当前在范围内的所有variables的字典及其值

这个问题提供了一个习惯用语。 您使用其中一个字典作为dict()构造函数的关键字参数:

 dict(y, **x) 

重复解决赞成x中的值; 例如

 dict({'a' : 'y[a]'}, **{'a', 'x[a]'}) == {'a' : 'x[a]'} 

你也可以使用dict的update方法

 a = {'a' : 0, 'b' : 1} b = {'c' : 2} a.update(b) print a 

两本字典

 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)) 

如果您需要这两个字典保持独立和可更新,您可以创build一个单一的对象来查询__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 >>>