如何对属于子字典的特定键的所有值求和

  • 本文关键字:求和 属于 字典 python
  • 更新时间 :
  • 英文 :


假设我有以下字典列表:

main_list = [
{"Afghanistan":{"1990":23000, "1991":29000, "1992":40000}},
{"Armenia": {"1990":40000, "1991":32211, "1992":89999}}
]

我想对所有的值求和。所以最后我想得到这样的结果:23000 + 40000(代表1990年)29000 + 32211(代表1991年)等等。我已经知道如何去做的循环,以非常传统的方式检查条件。但是,执行此操作的最干净的方法是什么?我已经看到有一些外部库可以帮助您轻松地完成这样的工作。这是一个非常简单的例子在某些情况下,问题可能会变得非常混乱,所以如果有什么东西可以快速分组数据就很好了。我不想用熊猫。谢谢你的帮助。

您可以使用复杂的字典理解,但我认为这样更清楚:

from collections import defaultdict
D = defaultdict(lambda: 0)
main_list = [
{"Afghanistan":{"1990":23000, "1991":29000, "1992":40000}},
{"Armenia": {"1990":40000, "1991":32211, "1992":89999}}
]
for d in main_list:
for k in d.keys():
for _k, _v in d[k].items():
D[_k] += _v
print(dict(D))

对数据进行一次迭代,并在字典中按年排序。

from collections import defaultdict
main_list = [
{"Afghanistan":{"1990":23000, "1991":29000, "1992":40000}},
{"Armenia": {"1990":40000, "1991":32211, "1992":89999}}
]
d = defaultdict(int)
for country in main_list:
for data in country.values():
for year, value in data.items():
d[year] += value

如果可能和方便的话,我建议将main_list作为一个字典,因为它似乎更有意义。

main_list = {
"Afghanistan":{"1990":23000, "1991":29000, "1992":40000},
"Armenia": {"1990":40000, "1991":32211, "1992":89999},
}

对于循环,您可以跳过for country in main_list层。

如果我理解对了,也就是说,如果你想添加相同索引的值,那么这应该可以工作

main_list = [
{"Afghanistan":{"1990":23000, "1991":29000, "1992":40000}},
{"Armenia": {"1990":40000, "1991":32211, "1992":89999}}
]
keys = list(main_list[0].values())[0].keys() #all the keys WARNING: THIS WILL ONLY WORK IF THE KEYS ARE SAME
vals = [list(i.values())[0].values() for i in main_list] #get the all the values
combined = list(zip(*vals)) #merge them in a way that the indexes are same, such as 23,000 to 40,000
print(dict(zip(keys, list(map(sum, combined))))) #add all and display the result

最新更新