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

时间:2014-06-17 15:23:42

标签: python dictionary

对不起,如果这是一个愚蠢的问题,我很难想到另一个简单的方法。

我的代码(相关位):

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本身)。它似乎只是改变了存储在字典中的值。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

假设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']

答案 1 :(得分:1)

您应该向file2添加某种方法来进行更新,因为您在该代码中执行的操作是更改字典中的键值(#39;变量')。 / p>

例如,您可以在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

无论如何,这是一个糟糕的结构,如果你需要扩展它(比如在字典中有更多的元素),它会很难并且容易出错。

答案 2 :(得分:-1)

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

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

当您更改self.sliderData[i]['variable']时,它不会更改file2.NUMMOUNTAINS 当您更改file2.NUMMOUNTAINS时,它不会更改self.sliderData[i]['variable']