更改字典中存储的变量的值

2024-10-01 11:31:31 发布

您现在位置:Python中文网/ 问答频道 /正文

抱歉,如果这是一个愚蠢的问题,我正在努力想另一个简单的方法来解决它。你知道吗

我的代码(相关位):

import file2

sliderData = [{'name': 'Number of mountains', 'variable': file2.NUMMOUNTAINS},
              {'name': 'Number of trees', 'variable': file2.NUMTREES}

for i in range(len(self.sliders)):  # self.sliders is a list of Slider() objects
    self.sliderData[i]['variable'] = self.sliders[i].update()  # update() returns an int

print int(file2.NUMMOUNTAINS)

我无法确定如何使它更新存储在sliderData[i]['variable']中的变量(即更改file2.NUMMOUNTAINS本身)。它似乎只是改变了字典中存储的值。你知道吗

有什么想法吗?你知道吗


Tags: of方法代码nameimportselfnumberupdate
3条回答

似乎file2.NUMMOUNTAINSint,所以在字典中,您可以从file2.NUMMOUNTAINS获得值的副本-而不是引用变量file2.NUMMOUNTAINS

self.sliderData[i]['variable']file2.NUMMOUNTAINS是独立变量。你知道吗

当你改变self.sliderData[i]['variable']它不会改变file2.NUMMOUNTAINS
当您更改file2.NUMMOUNTAINS时,它不会更改self.sliderData[i]['variable']。你知道吗

您应该向file2添加某种方法来进行更新,因为您在该代码中所做的是更改字典中的值(键“variable”)。你知道吗

例如,可以在file2中有一个方法,该方法接收键名和值,然后更改要更改的实际值

class File2:

def __init__(self):
    self.NUMMOUNTAINS = 0
    self.NUMTREES = 0
    pass

def setValue(self, key, value):
    if key == 'Number of mountains':
         self.NUMMOUNTAINS = value
    elif key == 'Number of trees':
         self.NUMMTREES = value

然后在实际代码中:

for i in range(len(self.sliders)):  # self.sliders is a list of Slider() objects
    file2.setValue(self.sliderData[i]['name'], self.sliders[i].update())  # update() returns an int

不管怎么说,这是一个糟糕的结构,如果你需要扩展它(比如在字典中有更多的元素),它将很难和容易出错。你知道吗

假设file2.NUMMOUNTAINSintfloat,请注意这两种类型都是不可变的,即不能就地更改。你知道吗

因此,当您将self.sliders[i].update()返回的值赋给self.sliderData[i]['variable']时,这不会改变file2.NUMMOUNTAIN,而是将字典引用赋给另一个对象。你知道吗

下面是一个简单的例子:

>>> d = {'a': 1}
>>> id(d['a'])
1751629384
>>> d['a'] += 1
>>> d
{'a': 2}
>>> id(d['a'])
1751629400 # different 'id' means different object

您必须显式地更改属性的值,例如

file2.NUMMOUNTAIN = self.sliderData[0]['variable']

相关问题 更多 >