[英]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")
否則,看起來您正在嘗試制作包含兩個元素的元組:
k
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.