Python的 - 方便的方法来检查列表中的值是一个字典的一部分?(Python - Conveni

2019-10-18 10:31发布

我也承认没有就这个话题大量的研究,但我试图得到的东西很快完成。 我有一个整数作为键,并列出为值的字典。 以前,我被检查的列表在一个简单的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中的简洁和方便在我的骨头,因此我认为有可能是我所测试更好的解决方案。 如果没有,我可以迭代东西的工作,但如果有,我将不胜感激!

提前致谢!

Answer 1:

使用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在没有找到匹配。



Answer 2:

试试这个,假设你要检查的第一个元素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?