私はこのように作成した辞書を持っています:
myDict = {}
次に、別のディクショナリに対応するキーを追加し、別のディクショナリに別の値を入力します。
myDict[2000]['hello'] = 50
だから私が渡すときmyDict[2000]['hello']
どこかで、それは50
。
Pythonこれらのエントリをすぐに作成しないのはなぜですか?問題は何ですか?KeyErrorは、存在しないエントリを読み取ろうとしたときにのみ発生すると思っていましたが、正しく作成していますここに?
KeyError
は、_myDict[2000]
_にアクセスしようとすると、存在しないキーを読み取ろうとするために発生します。別の方法として、 defaultdict を使用できます。
_>>> from collections import defaultdict
>>> myDict = defaultdict(dict)
>>> myDict[2000]['hello'] = 50
>>> myDict[2000]
{'hello': 50}
_
defaultdict(dict)
は、myDictが不明なキーに遭遇した場合にデフォルト値を返すことを意味します。この場合、空の辞書であるdict()によって返されるものは何でもです。
しかし、あなたはare存在しないエントリを読み込もうとしています:myDict[2000]
。
コードで言うことの正確な翻訳は、「myDictに2000のキーを持つエントリを与え、そのエントリのキー 'hello'に対して50を格納する」です。しかし、myDictには2000のキーがないため、エラーが発生します。
実際に行う必要があるのは、そのキーを作成することです。あなたはそれを一度に行うことができます:
myDict[2000] = {'hello': 50}
あなたがしたいことは ネストされたdictを実装する :
私はこのアプローチをお勧めします:
_class Vividict(dict):
def __missing__(self, key):
value = self[key] = type(self)()
return value
_
ドキュメントから、_d[key]
_の下
バージョン2.5の新機能:dictのサブクラスがメソッド
__missing__()
を定義する場合、キーkey
が存在しない場合、d [key]操作はそのメソッドをキーで呼び出します引数としてのキー
それを試すには:
_myDict = Vividict()
myDict[2000]['hello'] = 50
_
そしてmyDictは今返す:
_{2000: {'hello': 50}}
_
そして、これはあなたが望む任意の深さで機能します:
_myDict['foo']['bar']['baz']['quux']
_
うまくいきます。
そうですが、コードではpythonは最初にmyDict [2000]を取得してから割り当てを行う必要があります。そのエントリは存在しないため、要素に割り当てることができません。