[英]Check if there is a dictionary inside a list comprehension
我如何檢查列表理解中是否有字典?
我正在嘗試這樣:
print dict in [company["attribute"] for company in dictionary["companies"]]
當它應該返回True時,它返回False。
謝謝。
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))
print any(map(lambda x: isinstance(x, dict), [company... ]))
應該可以。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.