Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 更改字典中存储的变量的值_Python_Dictionary - Fatal编程技术网

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

Python 更改字典中存储的变量的值,python,dictionary,Python,Dictionary,对不起,如果这是一个愚蠢的问题,我正在努力想另一个简单的方法来解决它 我的代码(相关位): 我不知道如何让它更新存储在sliderData[I]['variable']中的变量(即更改file2.nummontains本身)。它似乎只是改变了字典中存储的值 有什么想法吗?假设file2.nummontains是int或float,请注意这两种类型都是不可变的,即不能就地更改 因此,当您将self.sliders[i].update()返回的值分配给self.sliderData[i]['vari

对不起,如果这是一个愚蠢的问题,我正在努力想另一个简单的方法来解决它

我的代码(相关位):

我不知道如何让它更新存储在
sliderData[I]['variable']
中的变量(即更改
file2.nummontains
本身)。它似乎只是改变了字典中存储的值


有什么想法吗?

假设
file2.nummontains
int
float
,请注意这两种类型都是不可变的,即不能就地更改

因此,当您将
self.sliders[i].update()
返回的值分配给
self.sliderData[i]['variable']
时,此不会更改
file2.nummontain
,而是将字典引用分配给不同的对象

下面是一个最简单的示例:

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

似乎
file2.nummontains
int
,所以在字典中可以从
file2.nummontains
-不引用变量
file2.nummontains

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

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


当您更改
file2.nummontains
时,它不会更改
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

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

第一句是不正确的-字典最初引用与实例属性相同的对象(它实际上有“引用变量”而不是“值的副本”)。Python中的名称是对对象的引用,后续赋值不会改变原始对象。感谢您花时间回复。所以,如果不显式地键入file2.nummontains,就没有办法做到这一点?我希望迭代大量的滑块,每个滑块控制一个不同的变量,如果我不以您描述的方式显式地改变它,这将是一个更优雅的解决方案。你知道我该怎么做吗?你必须把对象属性转换成可变类型——例如,你可以把值存储在一个元素列表中,或者创建一个自定义的可变数字类型。你也有类似的问题。
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