可能性の重複:
How to make a python dictionary that returns key for keys missing from the dictionary instead of raising KeyError?Pythonのアイデンティティ辞書
私はdefaultdict
ようなものが必要。ただし、辞書にないキーについては、キー自体を返す必要があります。
これを行うにはどうすればよいですか?
可能性の重複:
How to make a python dictionary that returns key for keys missing from the dictionary instead of raising KeyError?Pythonのアイデンティティ辞書
私はdefaultdict
ようなものが必要。ただし、辞書にないキーについては、キー自体を返す必要があります。
これを行うにはどうすればよいですか?
魔法__missing__
メソッドを使用します。あなたがサポートする必要があれば、この作品
>>> class KeyDict(dict):
... def __missing__(self, key):
... return key
...
>>> x = KeyDict()
>>> x[2]
2
>>> x[2]=0
>>> x[2]
0
>>>
ありがとうございました。 – max
あなたは次のような意味ですか?
value = dictionary.get(key, key)
+1行の解決策、クラスまたは上書きの必要はありません – juliomalegria
'get 'アプローチの欠点は、あなたのコード全体に「見つからないときに戻るキー」ルールを複製することです。これがすべてのアクセスのルールであれば、コード全体で* k *回ではなく、コンテナ自体(@ katrielalexの '__missing__'回答を参照)にその_once_機能を実装することが最善です。 – Nathan
残念ながら、私は辞書でなければならないことを指定しませんでした(辞書メソッドを呼び出すことが期待される関数に渡されます)。 – max
class Dict(dict):
def __getitem__(self, key):
try:
return super(Dict, self).__getitem__(key)
except KeyError:
return key
>>> a = Dict()
>>> a[1]
1
>>> a[1] = 'foo'
>>> a[1]
foo
パイソン(@katrielalex言及__missing__
方法を追加しました)< 2.5。
用語ニックネーム:アイデンティティdictは、通常、ハッシュではなくキーにオブジェクトアイデンティティ(id)を使用する辞書であると解釈されます。 – delnan
ああ、私は他の質問を見つけられませんでした。それを指摘してくれてありがとう。 2つの質問を統合する方法はありますか?他の質問に対する受け入れられた答えは間違っていることが示され、OPは彼の受諾を変更することを煩わしませんでした。 – max
@max:重複した質問を処理するためのスタックオーバーフロープロセスがあります。すべてが処理されます=) – katrielalex