Python中的dict对象联合

时间:2012-03-22 09:36:47

标签: python dictionary associative-array idioms set-operations

如何计算Python中两个dict对象的并集,其中结果中存在(key, value)对,iff keyin 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

4 个答案:

答案 0 :(得分:87)

This question提供了一个成语。您使用其中一个dicts作为dict()构造函数的关键字参数:

dict(y, **x)

解决重复项以支持x中的值;例如

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

答案 1 :(得分:77)

你也可以使用像

这样的update dict方法
a = {'a' : 0, 'b' : 1}
b = {'c' : 2}

a.update(b)
print a

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