【问题标题】:Iterating over years in a dictionary在字典中迭代多年
【发布时间】:2021-03-19 18:45:17
【问题描述】:

我有一本这样的字典:

d={"01-01-1948":[0,51,31],"01-02-1948":[1,53,31],"01-01-1949":[0.25,52,46],"01-02-1949":[0,50,32]}

键是日期对象。我想创建另一个字典,它会向我显示每年的总价值,如下所示

c={1948:[1,104,62],1949:[0.25,102,78]

请告诉我该怎么做。我是初学者,所以不要在 lambda numpy 或其他不适合初学者的主题中向我展示。

【问题讨论】:

  • 在 Stack Overflow 上,您应该发布到目前为止您所尝试的内容。
  • 那么你想把一年作为关键吗?

标签: python dictionary iteration key


【解决方案1】:

这是我对您的问题的实现:

import datetime

d={"01-01-1948":[0,51,31],"01-02-1948":[1,53,31],"01-01-1949":[0.25,52,46],"01-02-1949":[0,50,32]}

keys = d.keys()
new_d = {}

for t_date in keys:
    # parse it into date and get the year
    year = datetime.datetime.strptime(t_date, '%d-%m-%Y').year
    if year in new_d:
        # if year exists then add numbers together
        for i in range(len(new_d[year])):
            new_d[year][i] += d[t_date][i]
    else:
        # does not exist so get values from the first occurence
        new_d[year] = d[t_date]
                       
print(new_d)

首先,您需要将您的字符串从 python 转换为datetime 对象。然后您创建一个新的空字典,其中将包含年份和年份总和。如果它存在于新字典中,则遍历原始字典中的所有年份并求和值。

【讨论】:

    【解决方案2】:

    试试这个:

    In [286]: d
    Out[286]:
    {'01-01-1948': [0, 51, 31],
     '01-02-1948': [1, 53, 31],
     '01-01-1949': [0.25, 52, 46],
     '01-02-1949': [0, 50, 32]}
    
    In [287]: unique_years = list(set([x.split('-')[-1] for x in d.keys()]))
    
    In [288]: desired_output = {}
    
    In [289]: for year in unique_years:
         desired_output[year] = [x for x in map(sum,zip(*[item[1] for item in d.items() if year in item[0]]))]
    
    In [290]: desired_output
    Out[290]: {'1949': [0.25, 102, 78], '1948': [1, 104, 62]}
    

    【讨论】:

      【解决方案3】:
      • 创建一个新字典,key 为年份,value 为 [0, 0, 0]
      • 遍历第一个字典中的每个元素,用this article指南相同的方式逐年过滤,并将它们的值添加到新字典中

      【讨论】:

        【解决方案4】:
        from collections import defaultdict
        from operator import add
        
        key_list = defaultdict(list)
        d = {"01-01-1948": [0, 51, 31], "01-02-1948": [1, 53, 31],
             "01-01-1949": [0.25, 52, 46], "01-02-1949": [0, 50, 32]}
        
        
        just_year = [{x[-4:]: y} for x, y in d.items()]
        
        for d in just_year:
            for t in d.items():
                key_list[t[0]].append(t[1])
        
        l = [{k: list(map(add, *v))} for k, v in key_list.items()]
        
        [{'1948': [1, 104, 62]}, {'1949': [0.25, 102, 78]}]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-07-16
          • 2013-08-19
          • 1970-01-01
          • 1970-01-01
          • 2013-02-01
          • 2016-01-04
          • 1970-01-01
          相关资源
          最近更新 更多