检查列表理解中是否有字典

时间:2017-02-05 22:44:18

标签: python list dictionary

我如何检查列表理解中是否存在词典?

我这样想:

print dict in [company["attribute"] for company in dictionary["companies"]]

返回False时返回False。

感谢。

2 个答案:

答案 0 :(得分:4)

dictclass所以你要问的是这个类是否在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... ]))应该有用。