這是我一直在python中搜索對象的方式。有沒有更高效(更快,更簡單)的方法?正在搜索一個對象
觀察: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中搜索對象的方式。有沒有更高效(更快,更簡單)的方法?正在搜索一個對象
觀察:A是已知的對象。
for i in Very_Long_List_Of_Names:
if A == My_Dictionary[i]:
print: "The object you are looking for is ", i
break
單線程將是:(i for i in List_of_names if A == My_dictionary[i]).next()
。
這將引發KeyError
如果有,是不是在My_dictionary
和密鑰的StopIteration
如果該項目沒有發現List_of_names
一個項目,否則返回這裏找到A.
我喜歡這個生成器+接下來,但在我的應用程序中,我更喜歡構建第一個(),所以它看起來更有意義:首先(如果我在List_of_names中,如果A == My_dictionary [i]) – tokland 2011-03-09 11:08:42
我假設你正在尋找一個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
編輯:注意,你可以有多個按鍵,在相同的單詞相同的值。上面的代碼只會找到第一個事件。儘管如此,它確實有很多名字。 :-)
對我來說,好像你是在錯誤地使用字典,如果你正在尋找一個特定的值的所有鍵搜索。
如果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
「反轉」鍵和新的字典中的值意味着重複值將相互覆蓋。但原始帖子還有一個問題,就是不知道它首先擊中哪一個值。 – 2011-03-09 10:25:22
你是對的,但是,在我的辯護中,我認爲假設是由於利馬爲他的循環寫的。 – 2011-03-09 10:27:08
您的代碼將永遠突破的關鍵,所以它並不真正遍歷長列表。也許你打算縮小「更多」一步? – 2011-03-09 10:19:52
PEP8:Very_Long_List_Of_Names,My_Dictionary。啊。 – tokland 2011-03-09 10:59:22
它似乎你需要反向字典(值 - >鍵),它是可以接受的,建立它? – tokland 2011-03-09 11:03:42