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

1 python dictionary list

我如何检查列表理解中是否有字典?

我正在尝试这样:

print dict in [company["attribute"] for company in dictionary["companies"]]
Run Code Online (Sandbox Code Playgroud)

当它应该返回 True 时,它​​却返回 False。

谢谢。

Pet*_*ood 5

dict是一个class所以你问的是这个类在 中创建字典吗list?您真正想知道的是创建的实例是否dictlist. 您可以使用isinstance来进行比较。

您说您检查字典是否在列表理解中,但实际上您的代码创建了一个list(使用列表理解),然后检查是否dictlist. 之后你就扔掉这份清单。这是低效的,因为您构建了整个列表,即使您只想检查其中的前几个项目直到找到匹配项。

您可以any使用isinstance

print any(isinstance(company["attribute"], dict)
          for company in dictionary["companies"])
Run Code Online (Sandbox Code Playgroud)

我的代码使用生成器表达式,它是理解的概括:

g = (isinstance(company["attribute"], dict)
     for company in dictionary["companies"])
Run Code Online (Sandbox Code Playgroud)

g实际上还没有被评估,所以没有检查任何属性来确定它们是否是 a 的实例dict。只有当生成器被消耗或实现时,它才会开始评估并产生结果。

g作为生成器可以传递给任何采用值序列的函数:

print any(g)
Run Code Online (Sandbox Code Playgroud)

any函数将迭代生成器生成的值。any正在寻找任何计算结果为 的值True,并将在第一个值处停止。这意味着生成器仅根据需要进行多次评估,并且是一种有效的顺序搜索方式。

同样,next可以与生成器一起使用来查找匹配某些条件的下一个值。因此,如果您想要实际的字典,您可以说:

attribute = next(company["attribute"]
                 for company in dictionary["companies"]
                 if isinstance(company["attribute"], dict))
Run Code Online (Sandbox Code Playgroud)