首页 > 解决方案 > 使用嵌套的元组列表创建 Python defaultdict

问题描述

场景是我有一个二维列表。内部列表的每一项都是元组(键,值对)。该键可能在列表中重复。我想动态创建一个默认字典,最终,字典存储键,以及二维列表中该键的所有值的累积和。

放置代码:

listOfItems = [[('a', 1), ('b', 3)], [('a', 6)], [('c', 0), ('d', 5), ('b', 2)]]
finalDict = defaultdict(int)
for eachItem in listOfItems:
    for key, val in eachItem:
        finalDict[key] += val
print(finalDict)

这给了我想要的东西:defaultdict(<class 'int'>, {'a': 7, 'b': 5, 'c': 0, 'd': 5})但我正在寻找一种使用理解的更“Pythonic”的方式。所以我尝试了以下方法:

finalDict = defaultdict(int)
finalDict = {key : finalDict[key]+val for eachItem in listOfItems for key, val in eachItem}
print(finalDict)

但输出是:{'a': 6, 'b': 2, 'c': 0, 'd': 5}我做错了什么?还是在使用理解时,字典不是即时创建和修改的?

标签: pythonpython-3.xnested-listsdefaultdictdictionary-comprehension

解决方案


是的,理解不能即时更新。无论如何,这个任务可能更适合collections.Counter()调用.update()

>>> from collections import Counter
>>> c = Counter()
>>> for eachItem in listOfItems:
...     c.update(dict(eachItem))
... 
>>> c
Counter({'a': 7, 'b': 5, 'd': 5, 'c': 0})

推荐阅读