在 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 条件,但我想了解为什么 dict 理解似乎比 list 更受限制。
请您参考如下方法:
Python 需要在第一个 k, v 周围加上括号。
((k, v) for k, v in {"invalid": 1, "valid": 2}.items() if k == "valid")
否则看起来你正在尝试创建一个包含两个元素的元组:
kv 为 k,v 为 ...
第二个在句法上无效。 (如果你在它周围加上括号,使它成为一个生成器表达式。)
