Python中基于列表的列表创建指定索引元素聚合字典的方法及结果异常问题咨询
解决Python列表转求和字典的问题
嗨,咱们先拆解下你遇到的问题——其实你的核心逻辑完全没问题,问题出在构建数据源时的一个小疏忽!
先看你代码里的这段:
animals = [animals1, animals2, animals3, animals3, animals4]
你不小心把animals3(也就是['cat', 1])重复添加了一次,原本你期望cat的总和是1+1=2,但实际因为多了一次累加,变成了1+1+1=3,这才导致结果不符合预期。
修正后的基础版本
只需要去掉重复的animals3,代码就能输出你想要的结果:
animal_dict = {} animals1 = ['cat', 1] animals2 = ['dog', 2] animals3 = ['cat', 1] animals4 = ['dog', 1] # 移除重复的animals3项 animals = [animals1, animals2, animals3, animals4] for i in animals: animal_dict[i[0]] = animal_dict.get(i[0], 0) + i[1] print(animal_dict) # 输出:{'cat': 2, 'dog': 3}
顺便说下,你用到的dict.get(key, default)方法是完全正确的——它会在键不存在时返回默认值0,存在时返回对应值,这个逻辑没有任何问题。
更简洁的优化方案
如果想让代码更清爽,也可以用collections模块的defaultdict,它能帮你省去判断键是否存在的步骤:
from collections import defaultdict animal_dict = defaultdict(int) # 直接用嵌套列表定义数据源更简洁 animals = [['cat', 1], ['dog', 2], ['cat', 1], ['dog', 1]] for animal, num in animals: animal_dict[animal] += num print(dict(animal_dict)) # 输出:{'cat': 2, 'dog': 3}
内容的提问来源于stack exchange,提问作者Paige
相关产品推荐
相关产品推荐

