我如何检查列表理解中是否存在词典?
我这样想:
print dict in [company["attribute"] for company in dictionary["companies"]]
返回False时返回False。
感谢。
答案 0 :(得分:4)
dict
是class
所以你要问的是这个类是否在list
中创建了词典?您真正想知道的是dict
创建的实例是否在list
中。您可以使用isinstance
进行比较。
您说过检查字典是否在列表中,但实际上您的代码会创建list
(使用列表解析),然后检查dict
中是否有list
。之后你扔掉了清单。即使您只是想检查其中的前几个项目,直到找到匹配项,构建整个列表的效率也很低。
您可以any
使用isinstance
:
print any(isinstance(company["attribute"], dict)
for company in dictionary["companies"])
我的代码使用生成器表达式,这是对概括的概括:
g = (isinstance(company["attribute"], dict)
for company in dictionary["companies"])
g
尚未实际评估,因此未检查任何属性以查看它们是否是dict
的实例。只有当发电机被消耗或实现时,它才会开始评估并产生结果。
g
可以传递给任何带有一系列值的函数:
print any(g)
any
函数将遍历生成器产生的值。 any
正在查找评估为True
的任何值,并将停在第一个值。这意味着只根据需要对发生器进行多次评估,这是一种有效的顺序搜索方式。
同样,next
可与生成器一起使用,以查找符合某些条件的下一个值。所以如果你想要实际的字典,你可以说:
attribute = next(company["attribute"]
for company in dictionary["companies"]
if isinstance(company["attribute"], dict))
答案 1 :(得分:2)
print any(map(lambda x: isinstance(x, dict), [company... ]))
应该有用。