これは、私がどのように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
これは、私がどのように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
1つのライナーは、(i for i in List_of_names if A == My_dictionary[i]).next()
です。 My_dictionary
でキーとアイテムが見つからない場合StopIteration
ないList_of_names
の項目がある場合、これはKeyError
をスロー
、他の、それはあなたのコードは常に解除されますA.
私はこのgenerator + nextが好きですが、私のアプリではfirst()をビルドしてより意味があるようにしたいと思います:最初(List_of_namesの場合はi == My_dictionary [i]) – tokland
私はあなたが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:あなたは同じ辞書で同じ値を持つ複数のキーを持つことができますなお、値に関連付けられたキーを取得します。上記のコードは、最初の発生を見つけるだけです。それでも、巨大な名前のリストを持っているのは確かです。 :-)
特定の値を探しているすべてのキーを検索していると、誤って辞書を使用しているように思えます。
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
新しい辞書の「反転」キーと値は、重複する値が互いに上書きされることを意味します。しかし、元の投稿には、それが最初にヒットした値のどれかを知らないという問題もあります。 –
あなたは正しいですが、私の防衛では、relimaがforループを書いた方法を前提にしていると思いました。 –
見つけた鍵を返します。長いリストを繰り返すわけではありません。おそらく、あなたは「ブレーク」をさらに一歩踏み込むことを意味しましたか? –
PEP8:Very_Long_List_Of_Names、My_Dictionary。ああ。 – tokland
逆の辞書(値 - >キー)が必要なようですが、それを構築するのは容認できますか? – tokland