Python 列表列表中的datetime对象-如何获取每天的总数?
我有一本字典,下面列出了前3个值: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
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()
可以工作,但是。