【问题标题】:Changing value from a nested dictionary in Python从 Python 中的嵌套字典中更改值
【发布时间】:2020-05-05 14:53:56
【问题描述】:

我只是想更改嵌套字典中的值。

第一个字典是空的,第二个是填充的。 当我尝试更改嵌套字典中一项的值时,其他项具有相同键的值也已更改。

name = dict()
work = {"hour" : 4, "age":21}

name['bob'] = work
name['harry'] = work

name['bob']['hour'] = 7

现在,如果我打印新的 name 字典,我会得到这个:

{'bob': {'hour': 7, 'age': 21}, 'harry': {'hour': 7, 'age': 21}}

我想遇到这种情况:

{'bob': {'hour': 7, 'age': 21}, 'harry': {'hour': 4, 'age': 21}}

为什么它会改变 harry 的字典中的小时?

【问题讨论】:

  • 使用name['bob'] = work.copy()name['harry'] = work.copy()。它将传递引用而不是值。
  • 它们都是对同一个值的引用。你会想要复制它。

标签: python dictionary


【解决方案1】:

这是因为两个名称都引用同一个元素,即引用同一个值。您应该复制 dict 而不是像下面这样的简单赋值:

name = dict()
work = {"hour" : 4, "age":21}

name['bob'] = work.copy()
name['harry'] = work.copy()

name['bob']['hour'] = 7

【讨论】:

  • 浅拷贝不需要导入copy
【解决方案2】:

问题是你分配了你之前定义的同一个对象。

尝试使用字典复制:

name = dict()
work = {"hour" : 4, "age":21}

name['bob'] = work.copy()
name['harry'] = work.copy()

name['bob']['hour'] = 7

如果work 是嵌套字典,则必须使用deepcopycopy 创建不复制嵌套结构的浅表副本):

from copy import deepcopy
name['bob'] = deepcopy(work)
name['harry'] = deepcopy(work)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-16
    • 2019-12-26
    • 2022-06-13
    • 2020-10-01
    • 1970-01-01
    • 2021-04-14
    • 2022-11-15
    • 1970-01-01
    相关资源
    最近更新 更多