【问题标题】:How to change a variable within a dictionary如何更改字典中的变量
【发布时间】:2019-10-03 17:34:14
【问题描述】:

我想建立一个字典,将变量分配给一个键,并且我希望在变量发生变化时改变键。我了解,当您为字典、列表或变量赋值时,它会保留该值而不是确切的代码。我该如何解决这个问题? (这是 Python 2,如果您无法通过 print 函数周围的括号来判断的话。)

我尝试使用下面的代码来更改字典中的键,当它不起作用时,我在谷歌上搜索了如何解决这个问题。 Stack Overflow 是我最后的选择。

var = 7

dictionary = {
  "Var": var
}

var += 3

print var
print dictionary["Var"]

我希望输出是

10
10

但是,它会输出

10
7

这意味着var 发生了变化,但dictionary["Var"] 没有。

【问题讨论】:

  • 听起来像一个廉价的面纱围绕一个可变的全球。我可以说你不应该这样做吗?显式传递字典,直接在字典本身上进行变异,例如dictionary["Var"] += 3
  • 在这段代码中,这似乎是最好的选择,但这只是一个例子。在我的主要代码中,这不是一个真正的选择。我需要一种能够同时更改变量和键值的方法。
  • 如果主代码在你的控制之下,听起来是时候重构了。你真的不需要这样做。

标签: python string dictionary


【解决方案1】:

我怀疑您必须使用可变对象,例如:

var = [7]

dictionary = {
  "Var": var
}

var[0] += 3

print(dictionary)
{'Var': [10]}

【讨论】:

    【解决方案2】:

    这是因为int在python中是不可变的。

    var = 7
    

    这将创建新对象 7,以及对该对象 var 的新引用。

    dictionary = {
      "Var": var
    }
    

    在这里,您将分配给键 'Var' 与 var 相同的引用。所以现在dictionary['Var']var 指向同一个对象7。 现在,当您编写:var += 3 时,它会创建一个新对象 10 并将 var 分配给该对象。

    要省略它,变量var 应该是一些可变对象,或者你应该更新字典值:dictionary['Var'] += 3

    【讨论】:

    • 如何为这种情况创建一个可变对象?编辑:更具体地说,什么是可变对象?
    • 很难用几句话来解释。我建议你问谷歌。但这里有一个提示:列表是可变的。如果您使用:var = [7]dictionary['Var'] = varvar[0] += 3 并打印字典,您会注意到 dictionary['Var'] 的值发生了变化
    猜你喜欢
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 2021-02-01
    • 1970-01-01
    • 2022-08-03
    相关资源
    最近更新 更多