簡體   English   中英

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

[英]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 您隨后丟棄了該列表。 即使您只想檢查列表中的前幾項,直到找到匹配項,這對於構建整個列表來說都是低效率的。

您可以將anyisinstance一起使用:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM