从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()))
另一答案

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

以上是关于从2个列表中获取每个日期的总和的主要内容,如果未能解决你的问题,请参考以下文章

MySQL JOIN 2 个表并分别获取两个表的总和

如何从对象集合中获取第二个最新日期的对象

两个日期之间实体属性的核心数据总和

常用python日期日志获取内容循环的代码片段

哈斯克尔。我很困惑这个代码片段是如何工作的

片段中的 notifyDataSetChanged() 不刷新列表视图