2017-04-17 91 views
0

我找不出如何更新嵌套字典中的值,该值不断被覆盖。更新嵌套字典中的值

我有一个列表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

什么是'ordered_string_list'? – TrakJohnson

+0

@TrakJohnson对不起,应该是date_list。我改变了身体 – fpolig01

回答

4

你的预期输出是无效的字典,我想您的列表,你可以尝试使用setdefault()方法设置默认值,如果密钥尚未在字典中。

setdefault(key[, default])

如果关键是在字典中,返回其值。如果不是,则插入带有默认值 的密钥并返回默认值。默认默认为None。

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']}} 
+0

正是我需要的,谢谢你的明确解释。 – fpolig01