Python中在循环中修改字典值

0 投票
2 回答
42 浏览
提问于 2025-04-14 18:13

改变字典值的最简方式是(不使用一行代码)

# process array with loop
dct = {1: 'one', 2: 'two', 3: 'three'}

for key, value in dct.items():
     dct[key] = 'new'

print(dct)

#{1: 'new', 2: 'new', 3: 'new'}

根据Python手册,.values()的意思是“返回字典值的新视图”,而视图的意思是“提供字典条目的动态视图,这意味着当字典发生变化时,视图会反映这些变化。”

那为什么不反过来,改变视图不会动态改变字典呢?

dct = {1: 'one', 2: 'two', 3: 'three'}

for value in dct.values():
     value = 'new'

print(dct)

#{1: 'one', 2: 'two', 3: 'three'}

2 个回答

1

我可以用一个简单的列表比喻:

lst = ['a','b','c']
for value in lst:
    value ='new'

现在,如果你用 print(lst) 打印出来,你会得到什么呢?

print(lst)
#['a','b','c']

同样,字典也是不会改变的,

dct = {1: 'one', 2: 'two', 3: 'three'}

for value in dct.values():
     value = 'new'

print(dct)
#{1: 'one', 2: 'two', 3: 'three'}

正如 @ForceBru 所评论的那样

value = 'new' 这样的赋值操作并不会修改之前“存储”在 value 中的对象。

1

这主要是因为字典的键和值之间的关系。

在Python中,当你用 for value in dct.values(): 来遍历字典的值时,变量 value 只是指向字典中某个值的一个引用。当你给 value 赋一个新值时,其实只是改变了 value 指向的内容,并没有改变字典里原本的值。

下面是具体发生了什么:

  • 在循环 for value in dct.values(): 中,value 会一个一个地被赋值为字典里的每个值。
  • 当你执行 value = 'new' 时,你只是把 value 的指向改成了字符串 'new'。
  • 这个赋值操作并不会改变字典 dct 中原来的值。

所以,要想改变字典里的值,你需要用键来直接访问和修改字典的值,就像你之前提到的那样。

撰写回答