2017-04-17 1 views
0

ネストされたディクショナリの値を更新する方法がわかりません。値は上書きされ続けます。ネストしたディクショナリの値を更新する

私は、ネストされた辞書の構築に取り組んでいると、これまでのところ、私は

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

これは私が欲しいものに近いが得

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 

を持つリストにdate_list = ['2018AUG15', '2017APR22', '2017MAR05', '2016FEB10', '2016FEB09']

を持っています。ループしている年と月が更新されています。ですが、その日はではありません。

私は次のことを試してみましたが、まだ何もしている -

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

あなたの予想される出力は、あなたが、私はあなたがリストを必要とし、有効な辞書ではありませんになりたいですkeyがdictにまだ存在しない場合、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

関連する問題