2012-07-24 11 views
13

をインデックスのキーを取得する:私は辞書で、インデックスのキーを取得するにはどうすればよい
Inverse dictionary lookup - Python
reverse mapping of dictionary with PythonPythonの:可能な重複辞書に

?以下のような例えば

i = {'a': 0, 'b': 1, 'c': 2} 

ので、私は私のキーを取得したい場合は、[0]、それは定義辞書により、「」

+0

あなたは*値をマップする*バック

d = OrderedDict([('first', 1), 

...( '第2'、2)、 ...( '三'、3)])

チェック鍵にpython dictにはインデックスはありません。 –

+0

http://stackoverflow.com/questions/3221475/reverse-mapping-of-dictionary-with-pythonおよびhttp://stackoverflow.com/questions/483666/python-reverse-inverse-a-mapping –

答えて

5

は順不同であり、したがって、インデックスを作成することはできませんが返されます。そのような機能のためには、順序付き辞書を使用してください。 Python Ordered Dictionary

+0

'OrderedDict 'sも索引付けできません。 – Julian

+0

trueですが、dict.keys()またはdict.values()が呼び出されると、その注文は保存されます。だから、これらのリストのインデックスは、辞書の "インデックス"に対応しています – underbar

17

Python辞書にはキーと値があります。あなたが求めているのは、与えられた値を指しているキーです。

あなただけのループ内でこれを行うことができます:辞書に値ごとに複数のキーがあることを

[k for (k, v) in i.iteritems() if v == 0] 

注意を。 {'a': 0, 'b': 0}は完全に合法です。

あなたはどちらかではなく、リストまたはOrderedDict instanceを使用する必要がありますを注文する場合:しかし、あなたはを変更するたびに

i={'foo':'bar', 'baz':'huh?'} 
keys=i.keys() #in python 3, you'll need `list(i.keys())` 
values=i.values() 
print keys[values.index("bar")] #'foo' 

items = ['a', 'b', 'c'] 
items.index('a') # gives 0 
items[0]   # gives 'a' 
+1

これは彼が求めていたものだとは思わない。彼はリストのような番号の付いた位置を使って「索引付け」したいと思っています。 –

+0

@PaulSeeb:OPが何を意味しているかを推測しています。 –

16

あなたこのような何かを行うことができます辞書が注文されていないので、キー、値を更新する必要があります。新しいキーと値のペアを挿入するたびに、あなたが考えていた順序は消え、新しい(多かれ少なかれランダムな)順序に置き換えられます。したがって、辞書でインデックスを尋ねることは意味をなさない。

あなたが求めているのは、おそらくあなたが実際に望むものではないことにも注意してください。辞書の逆マッピングが一意であるという保証はありません。言い換えれば、あなたは以下の辞書のかもしれない。その場合

d={'i':1, 'j':1} 

を、あなたがijをしたいし、実際にはここには答えはあなたを伝えることはできないだろうかどうかを知ることは不可能である('i'または'j' )が選択されます(辞書は順不同です)。あなたはその状況で何をしたいですか?あなたは受け入れ可能なキーのリストを得ることができます...しかし、私は辞書のあなたの基本的な理解は、かなり正しくはないと思っています。

+0

私はあなたの答えは非常に誤解を招くと思います。辞書は順序付けられていません。あなたは、プログラミングロジックに根本的に反するものに仕事を転記すべきではありません。 –

+0

@PaulSeeb - 更新しました。それはまったく役に立ちますか? – mgilson

+0

@PaulSeeb - なぜあなたは「あなたが求めているのはおそらくあなたが望むものではない」と「辞書の基本的な理解を推測しているのは間違っている」と思うのですか? – mgilson

0

辞書は、キーと値のペアの順序付けられていないコレクションです。あなたはキーと値のペアのインデックスを持つことはできません。キーと値の同じインデックス値を使用して、2つの順序付きリストに保存することができます。キーリストの特定のインデックスにある各キーについて、関連する値を値リストから取得できます。

または、順序付き辞書を使用することをお勧めします。このordered list

関連する問題