从2个列表中获取每个日期的总和
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从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]
答案
我将从一个空结果开始,然后对每个日期/浮点对,更新结果。我正在使用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()))
另一答案
您将要使用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
以上是关于从2个列表中获取每个日期的总和的主要内容,如果未能解决你的问题,请参考以下文章