这是我一直在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