如何对字典内列表的指定索引元素分别求和?
Python字典子列表指定索引元素求和实现方案
原始数据
a_dictionary = {"dog": [["white", 3, 5], ["black", 6,7], ["Brown", 23,1]], "cat": [["gray", 5, 6], ["brown", 4,9]], "bird": [["blue", 3,5], ["green", 1,2], ["yellow", 4,9]], "mouse": [["gray", 3,4]] }
需求说明
对字典中每个键对应的子列表集合,分别计算所有子列表中索引为1的元素和索引为2的元素的总和,最终输出格式如下:
dog [32, 13] cat [9, 15] bird [8, 16] mouse [3,4]
可行实现方案
方法1:基础循环累加
直接遍历字典的键值对,初始化两个求和变量,逐个遍历子列表累加对应索引的值:
for key, values in a_dictionary.items(): sum_idx1 = 0 sum_idx2 = 0 for sub_list in values: sum_idx1 += sub_list[1] sum_idx2 += sub_list[2] print(f"{key} [{sum_idx1}, {sum_idx2}]")
方法2:生成器表达式简化求和
利用Python内置的sum()函数结合生成器表达式,直接提取对应索引元素求和,代码更简洁:
for key, values in a_dictionary.items(): sum_idx1 = sum(sub[1] for sub in values) sum_idx2 = sum(sub[2] for sub in values) print(f"{key} [{sum_idx1}, {sum_idx2}]")
方法3:zip+map批量处理
通过zip()将所有子列表的目标索引元素打包成两组,再分别求和,适合对多索引批量处理的场景:
for key, values in a_dictionary.items(): # 提取每个子列表的索引1、2元素并打包 idx1_vals, idx2_vals = zip(*(sub[1:] for sub in values)) print(f"{key} [{sum(idx1_vals)}, {sum(idx2_vals)}]")
关于遍历方式的说明
用range()遍历字典不可行的原因是:range(len(a_dictionary))只能拿到字典元素的位置索引,无法直接关联到对应的键和值;而for key, value in a_dictionary.items()是遍历字典键值对的标准方式,只要对value(即每个键对应的子列表集合)做进一步遍历或提取元素即可完成求和。
内容的提问来源于stack exchange,提问作者Erika
相关产品推荐
相关产品推荐

