"添加" python中的字典,如果一些(键,值)对匹配

时间:2014-10-14 18:19:02

标签: python dictionary

三个词典:

d0 = {"a": "hello", "b": "world", "c": 11}
d1 = {"a": "hello", "b": "world", "c": 100}
d2 = {"a": "goodbye", "b": "world", "c": 10}

它们应放在我迭代添加的字典列表中。

dictionaries = [d0]

如果“a”和“b”是相同的(str)值,如何合并字典并将整数“c”值加在一起?

有希望的结果:

d3 = {"a": "hello", "b": "world", "c": 111}
d2 = {"a": "goodbye", "b": "world", "c": 10}
dictionaries = [d2, d3] # any order

1 个答案:

答案 0 :(得分:2)

c值收集到由a, b键输入的词典中;使用collections.defaultdict() object可以使这更容易:

from collections import defaultdict

keyed = defaultdict(int)

for d in (d0, d1, d2):
    keyed[(d['a'], d['b'])] += d['c']

dictionaries = [{'a': a, 'b': b, 'c': c} for (a, b), c in keyed.items()]

如果特定密钥尚未成为字典的一部分,则keyed defaultdict对象默认为0(调用int生成0)。然后,上述循环对'c''a'值的给定组合的'b'的所有值求和。

演示:

>>> from collections import defaultdict
>>> d0 = {"a": "hello", "b": "world", "c": 11}
>>> d1 = {"a": "hello", "b": "world", "c": 100}
>>> d2 = {"a": "goodbye", "b": "world", "c": 10}
>>> keyed = defaultdict(int)
>>> for d in (d0, d1, d2):
...     keyed[(d['a'], d['b'])] += d['c']
... 
>>> keyed
defaultdict(<type 'int'>, {('hello', 'world'): 111, ('goodbye', 'world'): 10})
>>> [{'a': a, 'b': b, 'c': c} for (a, b), c in keyed.items()]
[{'a': 'hello', 'c': 111, 'b': 'world'}, {'a': 'goodbye', 'c': 10, 'b': 'world'}]