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