Получить сумму сумм за дату из 2 списков - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть два списка одинаковой длины, один с датами (ГГГГ-ММ-ДД), где некоторые повторяются, а другой с плавающими (как положительными, так и отрицательными).Как получить объект словаря с суммой значений с плавающей запятой, соответствующей каждой уникальной дате (отсортированной), в следующем формате:

result_dict = {unique_date_1: float_sum_1, unique_date_2: float_sum_2, etc...}

Мои списки:

dates = [2013-06-22, 2009-07-09, 2016-07-09, 2009-07-09]
floats = [0.0, 0.8, -0.4, 0.1]

Что я надеюсьполучить:

{2009-07-09: 0.9, 2013-06-22: 0.0, 2016-07-09: -0.4}

Что я пробовал до сих пор:

unique_dates = set(dates)
sum_list = [sum(number) for number in floats]

Ответы [ 2 ]

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

Я бы начал с пустого результата, затем для каждой пары дата / число с плавающей точкой обновил бы результат.Я использую defaultdict, поэтому нам не нужно возиться с проверкой, была ли дата еще замечена.

from collections import defaultdict
result = defaultdict(float)  # Default value of 0

for date, val in zip(dates, floats):
    result[date] += val

Для части вашего вопроса о сортировке, дикты не заказаныколлекции, но это не мешает вам перебирать их по порядку:

for date, float in sorted(result.items()):
    do_stuff_with_dates_in_order()

Или, если вы не хотите каждый раз звонить sorted:

from collection import OrderedDict
sorted_result = OrderedDict(sorted(result.items()))
0 голосов
/ 05 декабря 2018

Вы захотите использовать defaultdict с float в качестве фабрики по умолчанию.Затем zip списки и переберите ключи и значения, суммируя значения с соответствующим ключом.

from collections import defaultdict

dates = ['2013-06-22', '2009-07-09', '2016-07-09', '2009-07-09']
floats = [0.0, 0.8, -0.4, 0.1]

sum_dic = defaultdict(float)

for date, value in zip(dates, floats):
    sum_dic[date] += value

вывод

defaultdict(<class 'float'>, {'2013-06-22': 0.0, '2009-07-09': 0.9, '2016-07-09': -0.4})

Вы также можете сделать это без импорта defaultdict, например:

sum_dic = {}
for date, value in zip(dates, floats):
    sum_dic[date] = sum_dic.get(date, 0.0) + value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...