[英]How to add up specific parts of a list?
我有一个包含一堆数据的列表,格式为: date, month, data
我希望所有具有相同日期的条目将其所有数据汇总起来,而输出将只是日期,数据。 换句话说,数据看起来像这样
[(1/1/2011, August, 5), (1/1/2011, July, 4), (1,1,2011, June, 1), (1/6/2011, December, 5)]
对于此示例,我希望输出如下所示:
[(1/1/2011, 10), (1/6/2011, 5)]
我将如何去做呢? 我知道这会涉及到for循环,如果日期相似,它将对数据进行汇总。 但是我对如何解决这个问题感到困惑。
使用字典来保留唯一的日期:
dates = {}
for (date, month, day) in your_list:
if date not in dates:
dates[date] = day
else
dates[date] += day
然后,如果您想要指定的输出,则必须返回到列表:
outlist = []
for (date, daycount) in dates.items():
outlist.append( (date, daycount) )
话虽如此,无论何时使用日期,通常将它们存储为datetime对象都是很有用的,然后像添加日期这样的操作就更简单了。
在列表中找到所有日期,然后可以计算每个日期:
dates = [('1/1/2011', 'August', 5), ('1/1/2011', 'July', 4),
('1/1/2011', 'June', 1), ('1/6/2011', 'December', 5)]
each_date = set(d[0] for d in dates)
count_dates = [(d, sum(i[2] for i in dates if i[0] == d)) for d in each_date]
print(count_dates)
# -> [('1/6/2011', 5), ('1/1/2011', 10)]
这是基于itertools.groupby()
的单行代码:
>>> from itertools import groupby
>>> from operator import itemgetter
>>> dates = [('1/1/2011', 'August', 5), ('1/1/2011', 'July', 4),
('1/1/2011', 'June', 1), ('1/6/2011', 'December', 5)]
>>> [(date, sum(map(itemgetter(-1), group))) for (date, group) in groupby(dates, key=itemgetter(0))]
[('1/1/2011', 10), ('1/6/2011', 5)]
请注意,在此演示中,我使用了与@alecrasmussen答案相同的dates
因为OP无法提供Python解释的数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.