Skip to main content
 首页 » 编程设计

python之使用嵌套的元组列表创建 Python defaultdict

2025年05月04日8zdz8207

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

放代码:

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}我做错了什么?还是在使用理解时,字典不是动态创建和修改的?

请您参考如下方法:

是的,无法即时更新理解。不管怎样,这个任务可能更适合 collections.Counter() with .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})