我有列表列表
list1 = [['0', '2015-12-27', '64236.62'],
['1', '2015-12-12', '65236.12'],
... ]
此列表包含2015年至2018年的数据 如何计算每个月的价值? 因此,我想创建一个字典,其中包含特定年份每个月的数据。
我尝试过这样:
import re
years_month_count = {}
for i in list1:
match = re.search("[2][0][1][5-8]-[0-9][0-9]", i[1])
if match not in years_month_count:
years_month_count[match] = 0
else:
years_month_count[match] += float(i[2])
答案 0 :(得分:1)
使用str.rsplit
和collections.defaultdict
,您可以执行以下操作:
from collections import defaultdict
list1 = [['0', '2015-12-27', '64236.62'],
['1', '2015-11-12', '65236.12'],
['2', '2015-12-27', '64236.62']]
d = defaultdict(float)
for x in list1:
d[x[1].rsplit('-', 1)[0]] += float(x[2])
输出为dict
,如:
{'2015-12': 128473.24, '2015-11': 65236.12}
答案 1 :(得分:0)
您不应该使用else
子句,因为即使在一个月的第一天,您总是希望添加该值。
此外,您不需要正则表达式。如果所有的日期戳格式正确,则只需使用字符串切片即可。
years_month_count = {}
for _, date, value in list1:
month = date[:7]
years_month_count[month] = float(value) + years_month_count.get(month, 0)
答案 2 :(得分:0)
创建字典并将其初始化为0
d = {i:0 for i in range(1,13)}
循环浏览列表,拆分字符串以获取月份,然后将值添加到字典中。
for l in list1:
splt = l[1].split("-")
d[int(splt[1])] += float(l[2])