我如何检查列表理解中是否有字典?
我正在尝试这样:
print dict in [company["attribute"] for company in dictionary["companies"]]
Run Code Online (Sandbox Code Playgroud)
当它应该返回 True 时,它却返回 False。
谢谢。
dict是一个class所以你问的是这个类在 中创建字典吗list?您真正想知道的是创建的实例是否dict在list. 您可以使用isinstance来进行比较。
您说您检查字典是否在列表理解中,但实际上您的代码创建了一个list(使用列表理解),然后检查是否dict在list. 之后你就扔掉这份清单。这是低效的,因为您构建了整个列表,即使您只想检查其中的前几个项目直到找到匹配项。
您可以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)
| 归档时间: |
|
| 查看次数: |
1476 次 |
| 最近记录: |