【问题标题】:Python Dict Grouping by Date on KeyPython字典按日期分组键
【发布时间】:2020-04-16 18:25:26
【问题描述】:

我有一个字典,它的键是日期,它的项目是一些数字和带有Total 的数字的总和,如下所示。我想用它们的 Total 值的总和按年份对键进行分组。如果我使用固定的字典,我知道该怎么做。但我总是会写出不同的可变日期。我的示例列表是;

{
        "15-12-2017" : {
          "1" : "abc",
          "2" : "def",
          "Total" : "2"
        },
        "16-12-2017" : {
          "1" : "ghi",
          "2" : "jkl",
          "3" : "mno",
          "Total" : "3"
        }
        "17-12-2017" : {
          "1" : "ghi",
          "2" : "jkl",
          "3" : "mno",
          "4" : "pqr",
          "Total" : "4"
        }
        "15-12-2018" : {
          "1" : "ghi",
          "2" : "jkl",
          "3" : "mno",
          "Total" : "3"
        }
        "16-12-2018" : {
          "1" : "ghi",
          "2" : "jkl",
          "Total" : "2"
        }
        "18-12-2019" : {
          "1" : "ghi",
          "2" : "jkl",
          "3" : "mno",
          "Total" : "3"
        }
}

我想获得一个新的列表,例如;

{"2017":9,"2018":5,"2019":3}

我只能这样做;

for key in my_list:
    if key.split('-')[2] == '2017':
        l_2017.append(key)

但正如我之前所说,我将插入许多可变日期。我怎样才能像这种格式那样对它们进行聚类?

【问题讨论】:

    标签: python-3.x date datetime dictionary grouping


    【解决方案1】:

    这是一种方法:

    from dateutil.parser import parse
    
    date_data = {
        "15-12-2017" : {
            "1" : "abc",
            "2" : "def",
            "Total" : "2"
        },
        "16-12-2017" : {
            "1" : "ghi",
            "2" : "jkl",
            "3" : "mno",
            "Total" : "3"
        },
        "17-12-2017" : {
            "1" : "ghi",
            "2" : "jkl",
            "3" : "mno",
            "4" : "pqr",
            "Total" : "4"
        },
        "15-12-2018" : {
            "1" : "ghi",
            "2" : "jkl",
            "3" : "mno",
            "Total" : "3"
        },
        "16-12-2018" : {
            "1" : "ghi",
            "2" : "jkl",
            "Total" : "2"
        },
        "18-12-2019" : {
            "1" : "ghi",
            "2" : "jkl",
            "3" : "mno",
            "Total" : "3"
        }
    }
    
    sums = {}
    
    for date, data in date_data.items():
        year = str(parse(date).year)
        total = int(data['Total'])
        # Update sum if already tracking, otherwise create new entry in dictionary
        sums[year] = sums[year] + total if year in sums else total
    
    print(sums)
    

    这给出了输出:

    {'2017': 9, '2018': 5, '2019': 3}
    

    【讨论】:

      猜你喜欢
      • 2016-07-24
      • 2020-06-09
      • 1970-01-01
      • 2017-02-24
      • 2021-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-26
      相关资源
      最近更新 更多