首页 > 解决方案 > Python3:从 json 格式添加相等的元素

问题描述

Data = [{'Ferrari': 51078}, {'Volvo': 83245, 'Ferrari': 70432, 'Skoda': 
29264, 'Lambo': 862},
{'Ferrari': 306415, 'Jeep': 4025, 'Saab': 2708, 'Lexus': 161}, {'Fiat': 
27583, 'Maserati': 11030, 'Renault': 3194, 'Volvo': 259, 'Skoda': 164}, 
{'Ferrari': 2313172, 'Renault': 2475},
{'Volvo': 198671}, {'Volvo': 15762}]

我想把每辆车的数字加在一起,所以我得到每个元素的总数(下面的数字与数据不准确,只是一个例子):法拉利:152455 沃尔沃:13515 斯柯达:1532 兰博:4366 雷诺: 4262 玛莎拉蒂: 2345 雷克萨斯: 235 吉普: 124 萨博: 15

我尝试过 sum(),将其附加到新列表、集合和许多其他潜在的解决方案中,但我就是无法正确解决这个问题。我正在寻找一个不仅适用于我的问题的通用解决方案,因此如果我更改我的数据集以及数字和汽车,它也需要适用于新数据。

我正在使用 Python3。

标签: jsonpython-3.xlist

解决方案


您可以使用defaultdict. 下面的代码遍历字典列表。然后取出一个随机键值对,直到每个dict为空并对结果求和。

from collections import defaultdict

data = [{'Ferrari': 51078},
        {'Volvo': 83245, 'Ferrari': 70432, 'Skoda': 29264, 'Lambo': 862},
        {'Ferrari': 306415, 'Jeep': 4025, 'Saab': 2708, 'Lexus': 161},
        {'Fiat': 27583, 'Maserati': 11030, 'Renault': 3194, 'Volvo': 259, 'Skoda': 164},
        {'Ferrari': 2313172, 'Renault': 2475},
        {'Volvo': 198671},
        {'Volvo': 15762}]

output = defaultdict(int)

for d in data:
    while d:
        k, v = d.popitem()
        output[k] += v

print(output)

输出

defaultdict(<class 'int'>, {'Ferrari': 2741097,
                            'Lambo': 862,
                            'Skoda': 29428,
                            'Volvo': 297937,
                            'Lexus': 161,
                            'Saab': 2708,
                            'Jeep': 4025,
                            'Renault': 5669,
                            'Maserati': 11030,
                            'Fiat': 27583})

推荐阅读