从2个列表中获取每个日期的总和

问题描述 投票:1回答:2

我有两个相等长度的列表,一个有日期(YYYY-MM-DD),其中一些重复,一个有浮点(正面和负面)。我将如何获得一个字典对象,其中浮点数的总和对应于每个唯一日期(已排序),格式如下:

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]
python list dictionary
2个回答
2
投票

我将从一个空结果开始,然后对每个日期/浮点对,更新结果。我正在使用defaultdict所以我们不必乱用于检查日期是否已被看到。

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

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

对于有关排序的问题,dicts不是有序集合,但这并不能阻止您按顺序迭代它们:

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

或者,如果您不想每次都致电sorted

from collection import OrderedDict
sorted_result = OrderedDict(sorted(result.items()))

3
投票

您将要使用defaultdictfloat作为默认工厂。然后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
© www.soinside.com 2019 - 2024. All rights reserved.