2011-03-09 14 views
1

これは、私がどのようにPythonでオブジェクトを検索してきたかです。より効率的な(より速く簡単な)方法がありますか?オブジェクトの検索

Obs:Aは既知のオブジェクトです。

for i in Very_Long_List_Of_Names: 
    if A == My_Dictionary[i]: 
     print: "The object you are looking for is ", i 
     break 
+2

見つけた鍵を返します。長いリストを繰り返すわけではありません。おそらく、あなたは「ブレーク」をさらに一歩踏み込むことを意味しましたか? –

+0

PEP8:Very_Long_List_Of_Names、My_Dictionary。ああ。 – tokland

+0

逆の辞書(値 - >キー)が必要なようですが、それを構築するのは容認できますか? – tokland

答えて

1

1つのライナーは、(i for i in List_of_names if A == My_dictionary[i]).next()です。 My_dictionaryでキーとアイテムが見つからない場合StopIterationないList_of_namesの項目がある場合、これはKeyErrorをスロー

、他の、それはあなたのコードは常に解除されますA.

+0

私はこのgenerator + nextが好きですが、私のアプリではfirst()をビルドしてより意味があるようにしたいと思います:最初(List_of_namesの場合はi == My_dictionary [i]) – tokland

0

私はあなたがPython辞書の値でオブジェクトを探していると仮定します。

あなたは、単に(のように、あなたが本当にその値にどのキーマップを知ることは気にしない)、その存在を確認したい場合は、あなたが行うことができます:

if A in My_Dictionary.values(): 
    print "The object is in the dictionary" 

そうでない場合は、あなたが望むならば

for k, v in My_Dictionary.iteritems(): 
    if v == A: 
     print "The object you are looking for is ", k 
     break 

EDIT:あなたは同じ辞書で同じ値を持つ複数のキーを持つことができますなお、値に関連付けられたキーを取得します。上記のコードは、最初の発生を見つけるだけです。それでも、巨大な名前のリストを持っているのは確かです。 :-)

0

特定の値を探しているすべてのキーを検索していると、誤って辞書を使用しているように思えます。

Aがハッシュ可能な場合は、Aをその値がiの辞書に格納します。

d = {A: 'a_name'} 

My_Dictionaryは巨大なものではなく、メモリ内にすることができ自明フィット感、そして、Aはハッシュ可能であるならば、それから重複した辞書を作成します。

d = dict((value, key) for key, value in My_Dictionary.iteritems()) 
if A in d: 
    print "word you're looking for is: ", d[A] 

をそれ以外の場合は、あなたが反復する必要があります

for word, object_ in My_Dictionary.iteritems(): 
    if object_ == A: 
     print "word you're looking for is: ", word 
+0

新しい辞書の「反転」キーと値は、重複する値が互いに上書きされることを意味します。しかし、元の投稿には、それが最初にヒットした値のどれかを知らないという問題もあります。 –

+0

あなたは正しいですが、私の防衛では、relimaがforループを書いた方法を前提にしていると思いました。 –

関連する問題