dictionary:Python中的dict对象联合

本问题已经有最佳答案,请猛点这里访问。

如何在Python中计算两个dict对象的并集,如果key的结果中存在一个(key, value)对,那么in是dict之一(除非存在重复)?

例如,{'a' : 0, 'b' : 1}{'c' : 2}的联盟是{'a' : 0, 'b' : 1, 'c' : 2}

最好不修改输入dict。有用的示例:获取当前作用域中所有变量及其值的dict


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

1
dict(y, **x)

x中解析重复的值;例如

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


您还可以使用update的dict like方法

1
2
3
4
5
a = {'a' : 0, 'b' : 1}
b = {'c' : 2}

a.update(b)
print a


两本词典

1
2
def union2(dict1, dict2):
    return dict(list(dict1.items()) + list(dict2.items()))

n字典

1
2
def union(*dicts):
    return dict(itertools.chain.from_iterable(dct.items() for dct in dicts))


如果您需要保持两个词典的独立性和可更新性,您可以创建一个对象,该对象在其__getitem__方法中查询这两个词典(并根据需要实现get__contains__和其他映射方法)。

一个极简主义的例子可能是这样的:

1
2
3
4
5
6
7
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]

和它的工作原理:

1
2
3
4
5
6
7
8
9
10
11
>>> 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
>>>