簡體   English   中英

嵌套列表理解字典和列表python

[英]Nested list comprehension dict and list python

我有一個字典列表,其中有很多鍵,並且只想將每個字典的鍵價格值過濾到一個列表中。 我正在使用下面的代碼,但無法正常工作...

print [b for a:b in dict.items() if a='price' for dict in data]

在此先感謝您的幫助!

我認為您需要以下內容(如果data是您的“詞典列表”):

[d.get('price') for d in data]

我正在做的是,遍歷字典列表,並對每個字典使用get('price') (因為get()不會拋出鍵異常)來讀取'price'鍵的值。
注意:避免使用“ dict”作為變量名稱,因為它是內置類型名稱。

例:

>>> data = [ {'price': 2, 'b': 20}, 
             {'price': 4, 'a': 20}, 
             {'c': 20}, {'price': 6, 'r': 20} ]  # indented by hand
>>> [d.get('price') for d in data]
[2, 4, None, 6]
>>> 

您可以通過以下方式添加顯式的if-check來刪除輸出列表中的None[d['price'] for d in data if 'price' in d]

您的代碼的評論:

[b for a:b in dict.items() if a='price' for dict in data]
  1. 您有愚蠢的語法錯誤a:b應該是a, b
  2. 其次,if條件中的語法錯誤-a a='price'應該是a == 'price' (misspell ==運算符為=)
  3. 嵌套循環的順序是錯誤的(在列表壓縮中,我們稍后會編寫嵌套循環)
  4. 這不是錯誤,使用內置類型名稱作為變量名稱是不好的做法。 您不應將“ dict”,“ list”,“ str”等用作變量(或函數)名稱。

    您的代碼的正確形式是:

      [b for dict in data for a, b in dict.items() if a == 'price' ] 
  5. 在列表壓縮表達式for a, b in dict.items() if a == 'price'不需要for a, b in dict.items() if a == 'price'循環,則for a, b in dict.items() if a == 'price'setdefualt(key)簡單的get(key)setdefualt(key)[key]可以更快地進行無循環。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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