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

时间:2018-12-04 21:45:53

标签: python list dictionary

我有两个长度相等的列表,一个带有日期(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]

2 个答案:

答案 0 :(得分:3)

您将要使用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

答案 1 :(得分:2)

我将从一个空结果开始,然后对于每个日期/浮动对,更新结果。我使用的是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()))