我也承认没有就这个话题大量的研究,但我试图得到的东西很快完成。 我有一个整数作为键,并列出为值的字典。 以前,我被检查的列表在一个简单的if语句的解释是:
if(someList is in someDictionary.values()):
someCode() #failure
但是,我意识到这是不正确的,我做什么,我只希望为您在字典中的值,列入名单的第一个值,例如
if(someList[0] == someValueInDictionary[0]):
someCode() #failure
我第一次尝试
if(someList[0] is in someDictionary.values()[0]):
someCode() #failure
但明显无法正常工作。 作为someDictionary.values()是在本身的列表。 我知道我可以通过所有值的重复检查,如
for list in someDictionary.values():
if(someList[0] == list[0]):
someCode() #failure
actualCode() #success
但是,这确实打乱了我的计划流程。 我是一个新的Python程序员,最有经验的Java和我试图让Python中的简洁和方便在我的骨头,因此我认为有可能是我所测试更好的解决方案。 如果没有,我可以迭代东西的工作,但如果有,我将不胜感激!
提前致谢!
使用any()
函数与发电机表达找到,如果有一个包含你的项目的任何字典值:
if any(someList[0] in v for v in someDictionary.itervalues()):
# item found
使用someDictionary.values()
作为发电机表达遍历由一个关于Python 3.发生器表达遍历字典的值(不首先产生的所有值的列表),并测试对每一个值,一个。
any()
只测试来自发电机的表达元件,直到一个是True
,然后停止循环,使该相对高效。
如果你需要有匹配值的键,使用next()
next((k for k, v in someDictionary.iteritems() if someList[0] in v), None)
它返回要么匹配键,或None
在没有找到匹配。
试试这个,假设你要检查的第一个元素someList
针对所有的第一个元素someDictionary
的列表值(在问题的代码似乎表明这是你想要的):
if someList[0] in (x[0] for x in someDictionary.itervalues()):
someCode()
但是,如果你想要的是检查的第一要素someList
在任何值列表,那么试试这个:
import itertools as it
if someList[0] in it.chain(*someDictionary.itervalues()):
someCode()
文章来源: Python - Convenient way to check for a value in a list that is part of a dictionary?