2011-03-09 46 views
1

這是我一直在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 
+2

您的代碼將永遠突破的關鍵,所以它並不真正遍歷長列表。也許你打算縮小「更多」一步? – 2011-03-09 10:19:52

+0

PEP8:Very_Long_List_Of_Names,My_Dictionary。啊。 – tokland 2011-03-09 10:59:22

+0

它似乎你需要反向字典(值 - >鍵),它是可以接受的,建立它? – tokland 2011-03-09 11:03:42

回答

1

單線程將是:(i for i in List_of_names if A == My_dictionary[i]).next()

這將引發KeyError如果有,是不是在My_dictionary和密鑰的StopIteration如果該項目沒有發現List_of_names一個項目,否則返回這裏找到A.

+0

我喜歡這個生成器+接下來,但在我的應用程序中,我更喜歡構建第一個(),所以它看起來更有意義:首先(如果我在List_of_names中,如果A == My_dictionary [i]) – tokland 2011-03-09 11:08:42

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 

編輯:注意,你可以有多個按鍵,在相同的單詞相同的值。上面的代碼只會找到第一個事件。儘管如此,它確實有很多名字。 :-)

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

「反轉」鍵和新的字典中的值意味着重複值將相互覆蓋。但原始帖子還有一個問題,就是不知道它首先擊中哪一個值。 – 2011-03-09 10:25:22

+0

你是對的,但是,在我的辯護中,我認爲假設是由於利馬爲他的循環寫的。 – 2011-03-09 10:27:08