我有一本字典,其中每个值都是一个列表,如下所示:
dictA = {1:['a','b','c'],2:['d','e']}
不幸的是,我无法更改此结构来解决我的问题
我想将列表的所有条目收集到一个列表中,如下所示:
['a','b','c','d','e']
另外,我只想在if块内执行一次。由于我只想执行一次,所以我不想将其存储到中间变量,因此自然而然地,列表理解是解决之道。但是如何?我的第一个猜测
[dictA[key] for key in dictA.keys()]
产量,
[['a','b','c'],['d','e']]
这不起作用,因为
'a' in [['a','b','c'],['d','e']]
产量False
。我尝试过的其他所有内容都使用了某种非法语法。
我将如何进行这种理解?
也循环遍历返回的列表(直接遍历字典也为您提供键):
[value for key in dictA for value in dictA[key]]
或更直接使用dictA.itervalues()
:
[value for lst in dictA.itervalues() for value in lst]
列表理解让您嵌套循环;阅读以上循环,就像它们以相同顺序嵌套一样:
for lst in dictA.itervalues():
for value in lst:
# append value to the output list
或使用itertools.chain.from_iterable()
:
from itertools import chain
list(chain.from_iterable(dictA.itervalues()))
后者采用一个序列序列,让您像将它们视为一个大列表一样循环遍历。dictA.itervalues()
为您提供了一系列列表,chain()
并将它们组合在一起以list()
进行迭代并从中构建一个大列表。
如果您要做的只是测试所有值之间的隶属关系,那么您真正想要的是一种简单的方法来遍历所有值,并针对每个值测试您的值,直到找到匹配项。该any()
函数与合适的生成器表达式一起可以实现以下目的:
any('a' in lst for lst in dictA.itervalues())
这将返回True
只要在任何价值dictA
已经'a'
上市,并停止遍历.itervalues()
月初。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句