Пользовательская структура данных: словарь словарей с совокупным значением - PullRequest
0 голосов
/ 12 сентября 2018

Context

Я работаю над сценарием Python, который манипулирует статистикой, предоставляемой Google относительно установленных приложений из Play Store.

В частности, для каждого приложения я записываю количество установок в месяц в каждой стране.Учитывая, что Google предоставляет эту информацию через csv-файл с количеством строк в день для каждой страны, мне пришлось создать собственную структуру данных, в которой хранятся значения при разборе всех строк всех строк.

Пока что

Я составил словарь словарей.Ключи словаря первого уровня - месяцы (datetime объекты).Значения - это словари, ключами которых являются страны, а значения - совокупное количество установок для соответствующей страны за соответствующий месяц.

Это дает мне словарь со структурой {Month : {Country : amount_of_installs} }

Это позволяет мне построить следующую функцию для постепенного заполнения моего словаря:

def addNewValue(dictionary, month, country, valueToAdd):
    if month in dictionary:
        if country in dictionary[month]:
            dictionary[month][country] += valueToAdd
        else:
            dictionary[month][country] = valueToAdd
    else:
        dictionary[month] = {country: valueToAdd}

Вопрос

Хотя это рабочее решение , это похоже на серьезный неоптимальный взлом.Поэтому и ради образования мне интересно, есть ли другое, лучшее решение для такой задачи.Может быть, еще одна более оптимальная структура данных, о которой я не знаю, - существующий класс, которому удается сделать это уже, лучшим способом.

Вот и все, спасибо за ваши советы!

1 Ответ

0 голосов
/ 12 сентября 2018

Вы можете использовать вложенные defaultdict:

from collections import defaultdict as dd

dictionary = dd(lambda: dd(int))

Если вы передадите указанную структуру данных в свою функцию, функция может просто быть:

def addNewValue(dictionary, month, country, valueToAdd):
    dictionary[month][country] += valueToAdd
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...