Python3: добавление равных элементов из формата json - PullRequest
0 голосов
/ 09 декабря 2018
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}]

Я хочу сложить числа для каждого автомобиля, чтобы я получил общую сумму для каждого элемента (приведенные ниже цифры не точны с данными и просто примером): Ferrari: 152455 Volvo: 13515 Skoda: 1532 Lambo: 4366 Renault: 4262 Maserati: 2345 Lexus: 235 Джип: 124 Saab: 15

Я пробовал с sum (), добавить его в новые списки, коллекции и многие другие потенциальные решения, но япросто не могу понять это правильно.Я ищу общее решение, применимое не только к моей проблеме, поэтому, если я изменю свой набор данных и, следовательно, номера и машины, он должен работать и для новых данных.

Я использую Python3.

1 Ответ

0 голосов
/ 09 декабря 2018

Вы можете использовать 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})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...