Python 在for循环中使用dict理解而不创建新dict是否可能?

Python 在for循环中使用dict理解而不创建新dict是否可能?,python,loops,syntax-error,list-comprehension,Python,Loops,Syntax Error,List Comprehension,在Python3.5中,我试图使用dictcomprehension来迭代for循环,但它似乎不像list那样工作。以下内容将作为语法错误报告(不是由PyCharm报告,仅在运行时报告): 而以下工作: for e in (e for e in ["valid", "invalid"] if e == "valid"): # works print(e) 我知道创建一个新的dict会起作用(例如),但我希望避免开销,因为我只是在元素上进行操作 for k, v in {k: v fo

在Python3.5中,我试图使用
dict
comprehension来迭代
for
循环,但它似乎不像
list
那样工作。以下内容将作为语法错误报告(不是由PyCharm报告,仅在运行时报告):

而以下工作:

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)))

当然,如果k==“valid”,我可以使用一个普通的
:continue
条件在循环中,但是我想理解为什么
dict
理解似乎比
list
更有限,你需要创建一个带有k,v的元组


这就是导致语法错误的原因。如果您对列表做了相同的操作,请设置理解等。。这是完全相同的,如果要添加多个元素,则需要使用容器。第二个示例
(e代表e…
)有效,因为每次都返回一个元素,前两个示例也是生成器表达式,但后者实际上是一个dict comp。

您需要创建一个带有k,v的元组,即
(k,v)


这就是导致语法错误的原因。如果您对列表、集合理解等做了相同的操作,则完全相同,如果您要添加多个元素,则需要使用容器。第二个示例
(e代表e…
之所以有效,是因为每次都返回一个元素,前两个示例也是生成器表达式,但后者实际上是一个dict comp。

Python需要在第一个
k,v
周围加上括号

((k, v) for k, v in {"invalid": 1, "valid": 2}.items() if k == "valid")
否则,看起来您正试图创建包含两个元素的元组:

  • k
  • v代表k,v代表in…

  • 第二个在语法上是无效的(如果在其周围加上括号,使其成为生成器表达式,则可能是无效的)。

    Python需要在第一个
    k,v
    周围加上括号

    ((k, v) for k, v in {"invalid": 1, "valid": 2}.items() if k == "valid")
    
    否则,看起来您正试图创建包含两个元素的元组:

  • k
  • v代表k,v代表in…

  • 第二个在语法上是无效的(如果在其周围加上括号,使其成为生成器表达式,则为无效)

    在你的第一个例子中,这是一个生成器表达式,不是听写理解。你的最后一个例子是唯一有听写理解的例子。在你的第一个例子中,这是生成器表达式,不是听写理解。你的最后一个例子是唯一有听写理解的例子。
    ((k, v) for k, v in {"invalid": 1, "valid": 2}.items() if k == "valid")