如何从包含日期和列表中其他字符串的字符串列表中解析月份?

时间:2018-10-08 14:11:18

标签: python python-3.x

我有列表列表

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])

3 个答案:

答案 0 :(得分:1)

使用str.rsplitcollections.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)

  1. 创建字典并将其初始化为0

    d = {i:0 for i in range(1,13)}
    
  2. 循环浏览列表,拆分字符串以获取月份,然后将值添加到字典中。

    for l in list1:
        splt = l[1].split("-")
        d[int(splt[1])] += float(l[2])