Python 为什么列表理解不适用于使用等号更新字典元素

Python 为什么列表理解不适用于使用等号更新字典元素,python,python-3.x,Python,Python 3.x,创建字典列表,然后使用赋值将key:value对添加到每个字典: my_list_of_dicts = [{'a':1}, {'b':2}, {'c':3}] x = [elem['c']=3 for elem in my_list_of_dicts] File "<stdin>", line 1 x = [elem['c']=3 for elem in my_list_of_dicts] ^ SyntaxError

创建字典列表,然后使用赋值将key:value对添加到每个字典:

my_list_of_dicts = [{'a':1}, {'b':2}, {'c':3}]
x = [elem['c']=3 for elem in my_list_of_dicts]
  File "<stdin>", line 1
    x = [elem['c']=3 for elem in my_list_of_dicts]
                  ^
SyntaxError: invalid syntax

列表理解不能以这种方式支持作业。基本上,它所做的是通过迭代旧列表来创建一个新列表。看看变量X,它没有被赋值,因为变量赋值没有输出


通常的经验法则是,每个列表理解都可以写成for循环,但不能反过来写。

在理解中不能使用赋值。此外,在理解中使用就地修改通常是一个坏主意

你可以做:

>>ld=[{'a':1},{'b':2},{'c':3}]
>>>ld2=[ld中d的d.update({“c”:3}]
但是
ld2
的内容不会是您修改过的词典。它将是
[None,None,None]
,并且变量
ld
已被编辑到位

对于就地修改,使用
For
-循环

对于我的字典列表中的字典:
我的字典更新({“c”,3})

因为你应该把它写成一个循环。这能回答你的问题吗?“它在for循环中工作,但不是作为列表理解。为什么会这样?”——因为
for
循环和列表理解是完全不同的事情。列表理解不是循环。在工作中使用正确的工具。这能回答你的问题吗?上面的链接无法回答为什么在这种情况下作业不起作用。我不是在问什么是列表理解,我是在问为什么在这种情况下,这个作业对字典不起作用。
for elem in my_list_of_dicts:
     elem['c']=3
 
my_list_of_dicts
[{'a': 1, 'c': 3}, {'b': 2, 'c': 3}, {'c': 3}]