Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python—检查字典中的列表中的值的便捷方法?_Python_List_Dictionary_Include - Fatal编程技术网

Python—检查字典中的列表中的值的便捷方法?

Python—检查字典中的列表中的值的便捷方法?,python,list,dictionary,include,Python,List,Dictionary,Include,不可否认,我在这个问题上没有做过大量的研究,但我正在努力尽快完成一些工作。我有一本字典,以整数为键,列表为值。之前,我用一个简单的if语句检查字典中的列表: if(someList is in someDictionary.values()): someCode() #failure 然而,我意识到这对于我所做的是不正确的,我只想检查字典值中是否包含列表的第一个值,例如 if(someList[0] == someValueInDictionary[0]): someCode(

不可否认,我在这个问题上没有做过大量的研究,但我正在努力尽快完成一些工作。我有一本字典,以整数为键,列表为值。之前,我用一个简单的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的简洁性和便利性融入我的头脑,因此我认为对于我正在测试的东西,可能有更好的解决方案。如果没有,我可以让迭代工作,但是如果有,我会非常感激


提前谢谢

试一试,假设您想对照所有
someDictionary
列表值中的第一个元素检查
someList
的第一个元素(问题中的代码似乎表明这就是您想要的):

但如果要检查
someList
的第一个元素是否在任何值列表中,请尝试以下操作:

import itertools as it
if someList[0] in it.chain(*someDictionary.itervalues()):
    someCode()

试一试,假设您想对照所有
someDictionary
列表值中的第一个元素检查
someList
的第一个元素(问题中的代码似乎表明这就是您想要的):

但如果要检查
someList
的第一个元素是否在任何值列表中,请尝试以下操作:

import itertools as it
if someList[0] in it.chain(*someDictionary.itervalues()):
    someCode()
与生成器表达式一起使用,以查找是否存在包含您的项的字典值:

if any(someList[0] in v for v in someDictionary.itervalues()):
    # item found
在Python 3上使用
someDictionary.values()
。生成器表达式在字典值上循环(不首先生成所有值的列表),并在遍历生成器表达式时逐个测试每个值

any()
只测试生成器表达式中的元素,直到其中一个元素为
True
,然后停止循环,使其相对有效

如果需要匹配值的键,请使用
next()

它返回匹配的键,或在未找到匹配项的情况下返回
None

使用带生成器表达式的查找是否有包含您的项的字典值:

if any(someList[0] in v for v in someDictionary.itervalues()):
    # item found
在Python 3上使用
someDictionary.values()
。生成器表达式在字典值上循环(不首先生成所有值的列表),并在遍历生成器表达式时逐个测试每个值

any()
只测试生成器表达式中的元素,直到其中一个元素为
True
,然后停止循环,使其相对有效

如果需要匹配值的键,请使用
next()


它返回匹配的键,或者在未找到匹配项的情况下返回
None

我认为您可以将列表理解更改为生成器表达式,并将
.values()
更改为
.itervalues()
,以提高效率。那么gen expr呢<代码>1 in[x代表x范围内的x(10**7)]与
1 in(x代表x范围内的x(10**7))
显示了很大的不同。我认为您可以将列表理解更改为生成器表达式,并将
.values()
更改为
.itervalues()
以提高效率。gen expr呢<[x代表x范围内的x(10**7)]vs
1in(x代表x范围内的x(10**7))
显示了很大的不同。@Martijn Pieters事实上,有没有办法得到触发true的键?字典键或列表?列表会很好,因为我可以只做一些Dictionary.keys()[someDictionary.values().index(list)],但目标是字典键。我使用了一台时间机器,并添加了一种最有效的方法来检索键,然后再回复注释-P@Martijn Pieters实际上,有没有办法获取触发true?Dictionary键或list的键?list会很好,因为我可以只做一些Dictionary.keys()[someDictionary.values().index(list)],但目标是字典键。我使用了一台时间机器,并添加了一种最有效的方法来检索键,然后再回复注释-P