Python 列表列表中的datetime对象-如何获取每天的总数?

Python 列表列表中的datetime对象-如何获取每天的总数?,python,list,datetime,Python,List,Datetime,我有一本字典,下面列出了前3个值: day_counts_list = day_counts.values() day_counts_list[:3] [[(datetime.date(2015, 5, 23), 815), (datetime.date(2015, 5, 24), 700), (datetime.date(2015, 5, 25), 614), (datetime.date(2015, 5, 26), 2395), (datetime.date(2015, 5

我有一本字典,下面列出了前3个值:

day_counts_list = day_counts.values()
day_counts_list[:3]

[[(datetime.date(2015, 5, 23), 815),
  (datetime.date(2015, 5, 24), 700),
  (datetime.date(2015, 5, 25), 614),
  (datetime.date(2015, 5, 26), 2395),
  (datetime.date(2015, 5, 27), 2723),
  (datetime.date(2015, 5, 28), 2543),
  (datetime.date(2015, 5, 29), 2123)],
 [(datetime.date(2015, 5, 23), 1343),
  (datetime.date(2015, 5, 24), 1039),
  (datetime.date(2015, 5, 25), 1145),
  (datetime.date(2015, 5, 26), 2470),
  (datetime.date(2015, 5, 27), 2578),
  (datetime.date(2015, 5, 28), 2439),
  (datetime.date(2015, 5, 29), 2065)],
 [(datetime.date(2015, 5, 23), 1387),
  (datetime.date(2015, 5, 24), 1292),
  (datetime.date(2015, 5, 25), 1449),
  (datetime.date(2015, 5, 26), 2023),
  (datetime.date(2015, 5, 27), 2155),
  (datetime.date(2015, 5, 28), 2284),
  (datetime.date(2015, 5, 29), 2354)]]
我想要一份每天的总数清单。有什么想法吗


谢谢。

使用普通字典:

totals = {}

for group in your_list:
    for date, count in group:
        if date not in totals:
            totals[date] = count
        else:
            totals[date] += count

print totals
使用
collections.defaultdict(int)


使用常规词典:

totals = {}

for group in your_list:
    for date, count in group:
        if date not in totals:
            totals[date] = count
        else:
            totals[date] += count

print totals
使用
collections.defaultdict(int)

输出

    (datetime.date(2015, 5, 23), 3545)
    (datetime.date(2015, 5, 24), 3031)
    (datetime.date(2015, 5, 25), 3208)
    (datetime.date(2015, 5, 26), 6888)
    (datetime.date(2015, 5, 27), 7456)
    (datetime.date(2015, 5, 28), 7266)
    (datetime.date(2015, 5, 29), 6542)
输出

    (datetime.date(2015, 5, 23), 3545)
    (datetime.date(2015, 5, 24), 3031)
    (datetime.date(2015, 5, 25), 3208)
    (datetime.date(2015, 5, 26), 6888)
    (datetime.date(2015, 5, 27), 7456)
    (datetime.date(2015, 5, 28), 7266)
    (datetime.date(2015, 5, 29), 6542)

由于每个子列表都有唯一的“键”,因此可以是一行(除了导入之外):

在Python 3.3+中,您可以通过利用与普通
dict
一起工作的对就地添加的新支持(这意味着只创建和更新一个
计数器,而不是每个输入两个),对其进行显著优化(以避免创建这么多中间
计数器
对象):

from collections import Counter
from functools import reduce
from operator import iadd

total_day_counts = reduce(iadd, map(dict, day_counts_list), Counter())

在Python3.5上的测试中,对于相同的输入,第一个解决方案(具有更多的临时中间产物)所花费的时间大约是第二个解决方案的2-3倍(并且
sum
比其他等效的
reduce(operator.add,…)
一个小但一致的边距,可能是由于C中的缩减操作中的
求和
硬编码步骤。

由于每个子列表都有唯一的“键”,这可以是一行(除了导入):

在Python 3.3+中,您可以通过利用与普通
dict
一起工作的对就地添加的新支持(这意味着只创建和更新一个
计数器,而不是每个输入两个),对其进行显著优化(以避免创建这么多中间
计数器
对象):

from collections import Counter
from functools import reduce
from operator import iadd

total_day_counts = reduce(iadd, map(dict, day_counts_list), Counter())

在Python3.5上的测试中,对于相同的输入,第一个解决方案(具有更多的临时中间产物)所花费的时间大约是第二个解决方案的2-3倍(并且
sum
比其他等效的
reduce(operator.add,…)
大概是由于C语言中的简化操作中的
sum
硬编码步骤造成的较小但一致的余量。

您是否尝试过什么或让我们做您的家庭作业?我是python新手,试图自己学习@manetsusSure,但这个平台是为那些在任何地方尝试并获得堆栈的人准备的。然后他们会展示他们的努力,然后人们会急切地帮助你。你尝试过什么,或者让我们做你的家庭作业吗?我对python很陌生,并且试图自己学习@manetsussel,但是这个平台是为那些在任何地方尝试和获得stack的人准备的。然后,他们会展示他们的努力,然后人们会热心地帮助您使用
集合。defaultdict(int)
会整理一下。此外,如果tup[0]不在totals.keys()中,您也不想检查
,相反,如果tup[0]不在totals中,只需检查
。最后,您可以使用
for date,count in tuples
一次性解压日期和计数。使用
集合。defaultdict(int)
会稍微整理一下。此外,如果tup[0]不在totals.keys()中,您也不想检查
,而只需检查
如果tup[0]不在totals中。最后,您可以使用
for date,count in tuples
一次性解压日期和计数。TypeError:不支持+的操作数类型:'int'和'Counter'啊,boo<代码>总和
一定比我想象的要严格得多。我将修正,一秒。修正,
reduce(add,…)
在逻辑上等同于
sum(…)
,但没有
sum
的数字加法特殊大小写。“reduce”有效。不过这很好。我不知道你可以添加计数器
reduce()
可以工作,但是.TypeError:不支持+:“int”和“Counter”的操作数类型啊,boo<代码>总和
一定比我想象的要严格得多。我将修正,一秒。修正,
reduce(add,…)
在逻辑上等同于
sum(…)
,但没有
sum
的数字加法特殊大小写。“reduce”有效。不过这很好。我不知道你可以添加计数器
reduce()
可以工作,但是。