簡體   English   中英

是否可以在for循環中使用dict理解而不創建新的dict?

[英]Is it possible to use dict comprehension in a for loop without creating a new dict?

在Python 3.5中,我試圖使用dict理解來遍歷for循環,但是它似乎不像list那樣起作用。 以下內容將被報告為語法錯誤(不是PyCharm而是僅在運行時):

for k, v in (k, v for k, v in {"invalid": 1, "valid": 2}.items() if k == "valid"):  # syntax error
    print("Valid: " + (str(v)))

雖然以下工作:

for e in (e for e in ["valid", "invalid"] if e == "valid"):  # works
    print(e)

我知道創建一個新的dict是可以的(例如),但是我想避免開銷,因為我只是在元素上進行操作。

for k, v in {k: v for k, v in my_dict.items() if k == "valid"}.items():  # works
    print("Valid: " + (str(k)))

當然, if k == "valid": continue可以在循環內使用if k == "valid": continue條件,但是我可以使用一個普通的舊if k == "valid": continue ,但是我想了解為什么dict理解似乎比list更受限制。

Python需要在前k, v周圍加上括號。

((k, v) for k, v in {"invalid": 1, "valid": 2}.items() if k == "valid")

否則,看起來您正在嘗試制作包含兩個元素的元組:

  1. k
  2. v for k, v in ...

第二句在語法上無效。 (如果您將括號括起來,則使其成為生成器表達式。)

您需要使用k,v創建一個元組,即(k,v)

for k, v in ((k, v) for k, v in {"invalid": 1, "valid": 2}.items() if k == "valid"):  
              ^^^

這就是導致語法錯誤的原因。 如果您對列表執行相同的操作,設置理解等。這將完全相同,如果要添加一個以上的元素,則需要使用容器。 第二個示例(e for e...有效,因為您每次都返回一個元素,前兩個示例也是生成器表達式,只有后者實際上是dict comp。

暫無
暫無

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

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