Python3:将json格式的相等元素加在一起

时间:2018-12-09 11:25:12

标签: json python-3.x list

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。

1 个答案:

答案 0 :(得分:0)

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

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})