キーが既に存在する場合、以前のエントリを上書きせずに、ネストされた辞書の値を更新しようとしています。たとえば、私は辞書を持っています:
myDict = {}
myDict["myKey"] = { "nestedDictKey1" : aValue }
与える、
print myDict
>> { "myKey" : { "nestedDictKey1" : aValue }}
ここで、"myKey"
の下に別のエントリを追加します
myDict["myKey"] = { "nestedDictKey2" : anotherValue }}
これは戻ります:
print myDict
>> { "myKey" : { "nestedDictKey2" : anotherValue }}
でも私はしたい:
print myDict
>> { "myKey" : { "nestedDictKey1" : aValue ,
"nestedDictKey2" : anotherValue }}
以前の値を上書きせずに、"myKey"
を新しい値で更新または追加する方法はありますか?
これはとてもいいことです ネストされたdictを処理するための一般的な解決策 :
import collections
def makehash():
return collections.defaultdict(makehash)
これにより、ネストされたキーを任意のレベルで設定できます。
myDict = makehash()
myDict["myKey"]["nestedDictKey1"] = aValue
myDict["myKey"]["nestedDictKey2"] = anotherValue
myDict["myKey"]["nestedDictKey3"]["furtherNestedDictKey"] = aThirdValue
単一レベルのネストの場合、defaultdict
を直接使用できます。
from collections import defaultdict
myDict = defaultdict(dict)
myDict["myKey"]["nestedDictKey1"] = aValue
myDict["myKey"]["nestedDictKey2"] = anotherValue
そして、これがdict
のみを使用する方法です:
try:
myDict["myKey"]["nestedDictKey2"] = anotherValue
except KeyError:
myDict["myKey"] = {"nestedDictKey2": anotherValue}
これにはcollections.defaultdict
を使用でき、ネストされた辞書内でキーと値のペアを設定するだけです。
from collections import defaultdict
my_dict = defaultdict(dict)
my_dict['myKey']['nestedDictKey1'] = a_value
my_dict['myKey']['nestedDictKey2'] = another_value
または、最後の2行を次のように書くこともできます
my_dict['myKey'].update({"nestedDictKey1" : a_value })
my_dict['myKey'].update({"nestedDictKey2" : another_value })
myDict["myKey"]["nestedDictKey2"] = anotherValue
myDict["myKey"]
入れ子になった辞書を返します。他の辞書と同じように、別のキーを追加できます:)
例:
>>> d = {'myKey' : {'k1' : 'v1'}}
>>> d['myKey']['k2'] = 'v2'
>>> d
{'myKey': {'k2': 'v2', 'k1': 'v1'}}
ネストされたdictを不変として扱うことができます:
myDict["myKey"] = dict(myDict["myKey"], **{ "nestedDictKey2" : anotherValue })