【问题标题】:Replacing elements inside a dictionary Python given a list of current items在给定当前项目列表的情况下替换字典Python中的元素
【发布时间】:2020-09-25 00:54:51
【问题描述】:

我有一本字典,如下所示。我要做的是找出缺少的月份,并将它们添加为值为 Nan 的新键。

{'Congress': {'April': '5.902',
  'August': '5.925',
  'January': '5.881',
  'February': '5.888',
  'July': '5.920',
  'June': '5.910',
  'March': '5.896',
  'May': '5.906',
  'November': '5.942',
  'October': '5.938',
  'September': '5.933'},
 'Entity': {'April': '64.320',
  'August': '64.642',
  'December': '64.825',
  'January': '63.965',
  'February': '64.089',
  'July': '64.604',
  'June': '64.509',
  'March': '64.221',
  'May': '64.404',
  'October': '64.757',
  'September': '64.690'}}

在国会词典中我们缺少十二月,而在实体词典中我们缺少十一月。

到目前为止,我尝试的是创建一个名为months 的列表并对其进行迭代以查找字典的哪些值不在列表中。但是,这似乎不起作用,因为当我尝试打印它时,它不会打印任何内容,因此肯定不会添加键和值。

list_of_months =['January','February','March','April','May','June','July','August','September','October','November','December']

for k, v in newd.items():
  for x in v.keys():
    if x not in list_of_months :
      print(x)
  

预期的输出应该是:

{'Congress': {'April': '5.902',
  'December': 'Nan' ---------------------> Missing value to be added
  'August': '5.925',
  'January': '5.881',
  'February': '5.888',
  'July': '5.920',
  'June': '5.910',
  'March': '5.896',
  'May': '5.906',
  'November': '5.942',
  'October': '5.938',
  'September': '5.933'},
 'Entity': {'April': '64.320',
  'November': 'Nan' ---------------------> Missing value to be added
  'August': '64.642',
  'December': '64.825',
  'January': '63.965',
  'February': '64.089',
  'July': '64.604',
  'June': '64.509',
  'March': '64.221',
  'May': '64.404',
  'October': '64.757',
  'September': '64.690'}}

有人可以向我解释我做错了什么以及检查当前月份并添加缺少的月份的更好方法吗?

谢谢

【问题讨论】:

  • 您共享的代码不会创建任何内容 - 如果它们不是月份,它只会打印内部字典的键。请诚实地尝试解决问题并将该尝试的代码分享为minimal reproducible example。请务必包含您的代码的具体错误:“它不起作用”不是报告问题的好方法。更多信息请访问tourHow to Askminimal reproducible example

标签: python-3.x dictionary


【解决方案1】:

使用set 差异来检查缺少的月份

例如:

list_of_months ={'January','February','March','April','May','June','July','August','September','October','November','December'}

for k,v in data.items():
    for i in list_of_months - set(v.keys()): # Check for missing Month
        v[i] = 'Nan'      # Add Month
            
print(data)

输出:

{'Congress': {'April': '5.902',
              'August': '5.925',
              'December': 'Nan',
              'February': '5.888',
              'January': '5.881',
              'July': '5.920',
              'June': '5.910',
              'March': '5.896',
              'May': '5.906',
              'November': '5.942',
              'October': '5.938',
              'September': '5.933'},
 'Entity': {'April': '64.320',
            'August': '64.642',
            'December': '64.825',
            'February': '64.089',
            'January': '63.965',
            'July': '64.604',
            'June': '64.509',
            'March': '64.221',
            'May': '64.404',
            'November': 'Nan',
            'October': '64.757',
            'September': '64.690'}}

【讨论】:

    【解决方案2】:

    给你……你可能需要稍微修改一下,以便将它准确地用于你的用例。

    代码:

    dt = {'Congress': {'April': '5.902',
                       'August': '5.925',
                       'January': '5.881',
                       'February': '5.888',
                       'July': '5.920',
                       'June': '5.910',
                       'March': '5.896',
                       'May': '5.906',
                       'November': '5.942',
                       'October': '5.938',
                       'September': '5.933'},
          'Entity': {'April': '64.320',
                     'August': '64.642',
                     'December': '64.825',
                     'January': '63.965',
                     'February': '64.089',
                     'July': '64.604',
                     'June': '64.509',
                     'March': '64.221',
                     'May': '64.404',
                     'October': '64.757',
                     'September': '64.690'}
                     }
    
    months = {"January", "February", "March", "April", "May", "June", "July",
              "August", "September", "October", "November", "December"}
    
    
    def fill_months(dictionary: dict, replace: str = "NaN") -> dict:
      """
      Fill missing months with some replacement string (default: NaN).
      
      Args:
        dictionary: Dictionary which has the missing months.
        replace: Values to be added for the missing months.
    
      Returns:
        Dictionary with missing month and some string value.  
      """
      for idx in (months - set(dictionary.keys())):
        dictionary[idx] = replace
      return dictionary
    
    
    print(fill_months(dt["Congress"]))
    print(fill_months(dt["Entity"]))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-14
      • 2016-10-05
      • 1970-01-01
      • 2011-12-22
      • 1970-01-01
      • 2021-06-09
      • 2021-10-22
      • 1970-01-01
      相关资源
      最近更新 更多