2011-03-09 47 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