更新嵌套字典中的值

时间:2017-04-17 13:52:26

标签: python list dictionary

我无法弄清楚如何更新嵌套字典中的值,该值会被覆盖。

我有一个列表date_list = ['2018AUG15', '2017APR22', '2017MAR05', '2016FEB10', '2016FEB09']

我正在制作一个嵌套的词典,到目前为止我已经

import collections

date_list = ['2018AUG15', '2017APR22', '2017MAR05', '2016FEB10', '2016FEB09']
month_ditc = collections.defaultdict(dict)

for x in date_list:

    year = x[:4]
    month = x[4:-2]
    day = x[7:]

    month_ditc[year][month]= day

print month_ditc

产生

defaultdict(<type 'dict'>, {'2017': {'APR': '22', 'MAR': '05'}, '2016': {'FEB': '09'}, '2018': {'AUG': '15'}})

这接近我想要的。当我循环播放时,年份和月份正在更新,但是日期不是

我尝试了以下但仍然没有 -

 try:
     month_ditc[year][month] = day
 except KeyError:
     month_ditc[year] = {month:day}

我希望结果是

defaultdict(<type 'dict'>, {'2017': {'APR': '22', 'MAR': '05'}, '2016': {'FEB': '09','10'}, '2018': {'AUG': '15'}})

1 个答案:

答案 0 :(得分:4)

您的预期输出不是有效字典,我想您需要一个列表,如果密钥不在dict中,您可以尝试使用setdefault()方法设置默认值。

setdefault(key[, default])

  

如果键在词典中,则返回其值。如果没有,请插入密钥   默认值和返回默认值。默认默认为无。

import collections

date_list = ['2018AUG15', '2017APR22', '2017MAR05', '2016FEB10', '2016FEB09']
month_ditc = collections.defaultdict(dict)

for x in date_list:

    year = x[:4]
    month = x[4:-2]
    day = x[7:]

    month_ditc[year].setdefault(month, []).append(day)
print dict(month_ditc)

结果:

{'2017': {'APR': ['22'], 'MAR': ['05']}, '2016': {'FEB': ['10', '09']}, '2018': {'AUG': ['15']}}