2012-02-07 8 views
0

可能性の重複取得:値を取得するには値のキー

mydict = {'myKey': 'myValue'} 

:Pythonで
Most efficient method to get key for a value in a dict
Python: Modify a dict to make the key a value, and a value the key

を、私たちは辞書を持っていると仮定myKeyの場合は

myDict['myKey'] 

逆のことをする必要があるとします。 私の価値を価値あるものにする鍵を手に入れる最も簡単な方法は何ですか?

注:この場合、辞書は静的です。エントリは決して変更されません。

+1

は全単射キーと値(1対1)の間にあなたのマッピングですが?あるいは、値が複数のキーにマップされる可能性がありますか? –

+0

それは全身的です。 – dublintech

+0

@AlexReynoldsが何を得ているのか分かりますが、別の辞書で逆マッピングを作成するだけでは不十分です。辞書全体を反復してあなたの価値を探している他の解決策は、彼の質問に対する答えが「いいえ」の場合は複数のキーになる可能性があります。その場合でも、2番目の辞書を作成することができますが、値としてnタプルセットを格納することができます。 – shaunhusain

答えて

0

あなたは、最初の辞書は静的であるため、辞書を「逆転」を作成できます。

>>> revdict = dict([(mydict[key],key) for key in mydict]) 
>>> revdict['myValue'] 
'myKey' 
0

あなたはすべての値が別個

revDict = defaultdict(list) 
for k,v in myDict: 
    revDict[v].append(k) 
0

でない場合は、使用して値ツーリスト・オブ・キー配置にあなたの辞書を反転させることができる逆転辞書

revDict = dict((v,k) for k,v in myDict.items()) 

またはこれを作ることができます

newdict = {} 
for k,v in mydict.iteritems(): 
    lst = newdict.get(v, []) 
    newdict[v].append(k) 

次に、その逆の辞書にインデックスを作成して、キーを見つけることができます。

mykey = newdict.get(myvalue) 
1

これは動作するはずです:

keyPoint = [key for key, value in mydict.iteritems() if value == "myValue"][0] 

これは、キーの値を返します。