Подвести итоги и объединить список и его количество - PullRequest
0 голосов
/ 29 октября 2018

У меня есть список данных, которые объединены рядом. Как мне обобщить и отобразить их значения:

Мой список:

country = ['Australia', 'Australia', 'UAE', 'Australia', 'Israel', 'Ghana', 'Ghana']
views = [1, 2, 4, 5, 77, 5, 2]

Хотя я смог сопоставить их рядом ... вот так:

"Australia: 1",
"Australia: 2",
"UAE: 4",
"Australia: 5",
"Israel: 77",
"Ghana: 5",
"Ghana: "2"

Что я пробовал:

result = dict(zip(country, views))
{'Australia': 5, 'UAE': 4, 'Israel': 77, 'Ghana': 2}

Я хотел бы получить их резюме и суммирование с обеих сторон ... вот так:

"data": {
    "countries": [
        "Australia: 8",
        "UAE: 4",
        "Israel: 77",
        "Ghana: 7"]}

1 Ответ

0 голосов
/ 29 октября 2018

Вы можете использовать defaultdict(int) для увеличения количества:

>>> from collections import defaultdict

>>> country = ['Australia', 'Australia', 'UAE', 'Australia', 'Israel', 'Ghana', 'Ghana']
>>> views = [1, 2, 4, 5, 77, 5, 2]

>>> summary = defaultdict(int)
>>> for c, v in zip(country, views):
...     summary[c] += v
... 
>>> summary
defaultdict(<class 'int'>, {'Australia': 8, 'UAE': 4, 'Israel': 77, 'Ghana': 7})

Использование defaultdict(int) неявно устанавливает начальный счет в 0. Вот объяснение из collections документов :

Установка для default_factory значения int делает defaultdict полезным для подсчета (как сумка или мультимножество в других языках).

Когда буква встречается впервые, она отсутствует в отображении, поэтому функция default_factory вызывает int(), чтобы задать счетчик по умолчанию, равный нулю. Затем операция увеличения создает счетчик для каждой буквы.

Чтобы получить ваш «намеченный результат» точно:

d = {}; d['data'] = {'countries': dict(summary)}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...