web-dev-qa-db-ja.com

Python辞書のキーを使用してインデックスを取得する方法は?

python辞書のキーがあり、辞書の対応するインデックスを取得したい。次の辞書があるとします。

d = { 'a': 10, 'b': 20, 'c': 30}

python関数の組み合わせがあるので、キー値 'b'が与えられた場合、インデックス値1を取得できますか?

d.??('b') 

ループまたはラムダ(ループが埋め込まれている)で実現できることを知っています。もっと簡単な方法があるはずだと思った。

18
chapter3

OrderedDictsを使用: http://docs.python.org/2/library/collections.html#collections.OrderedDict

>>> x = OrderedDict((("a", "1"), ("c", '3'), ("b", "2")))
>>> x["d"] = 4
>>> x.keys().index("d")
3
>>> x.keys().index("c")
1

Python 3を使用している場合

>>> list(x.keys()).index("c")
1
41
Kiwisauce

pythonの辞書には順序がありません。代わりにタプルのリストをデータ構造として使用できます。

d = { 'a': 10, 'b': 20, 'c': 30}
newd = [('a',10), ('b',20), ('c',30)]

次に、このコードを使用して、特定の値を持つキーの場所を見つけることができます

locations = [i for i, t in enumerate(newd) if t[0]=='b']

>>> [1]
2
Matt Alcock

いいえ、Python辞書には設定された順序がないため、簡単な方法はありません。

ドキュメント から:

キーと値は、ランダムではなく、Python実装によって異なり、辞書の挿入と削除の履歴に依存します。

言い換えると、bの「インデックス」は、以前にマッピングに挿入および削除されたものに完全に依存します。

_>>> map={}
>>> map['b']=1
>>> map
{'b': 1}
>>> map['a']=1
>>> map
{'a': 1, 'b': 1}
>>> map['c']=1
>>> map
{'a': 1, 'c': 1, 'b': 1}
_

Python 2.7では、アプリケーションで挿入順序が重要な場合は、代わりに collections.OrderedDict() type を使用できます。

0
Martijn Pieters