首页 > 解决方案 > 在给定当前项目列表的情况下替换字典Python中的元素

问题描述

我有一本字典,如下所示。我要做的是找出缺少的月份,并将它们添加为值为 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'}}

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

谢谢

标签: python-3.xdictionary

解决方案


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

代码:

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

推荐阅读