在python和tryton中 我很困惑为什么我不能得到我想要的理想价值;我不知道出了什么问题。
让我们说self.pendingapr
有一个字段itemdescription
并且有3个索引,总体而言small
中有medium
,large
,itemdescriptions
。我真的不知道问题是否在for循环中:
global M2Mdic
global M2Mldic2
M2Mdic = {}
M2Mldic2 = {}
res = {}
for x in self.pendingapr:
M2Mdic['itemdescription'] = str(x.itemdescription)
M2Mldic2[x.id] = M2Mdic
当我打印M2Mldic2时,它给了我
>>> {1:'large',2:'large',3:'large'}
当我需要/并且期待是
>>> {1:'small',2:'medium',3:'large'}
答案 0 :(得分:2)
您将同一个对象放入M2Mldic2
字典中的每个值。请记住,对象通常通过引用传递,您需要在需要复制时显式复制它们。
for x in self.pendingapr:
M2Mdic = {
'itemdescription': str(x.itemdescription)
}
M2Mldic2[x.id] = M2Mdic
这会为M2Mldic2
中的每个值创建一个单独的字典。
答案 1 :(得分:1)
发生的事情是地图变量是Python中的引用。因此,在每次迭代中,如果您正在修改所有M2Mldic2映射的循环,因为它们都是相同的。
我认为你的代码应该是:
#global M2Mdic
global M2Mldic2
M2Mdic = {}
M2Mldic2 = {}
res = {}
for x in self.pendingapr:
M2Mdic = {}
M2Mdic['itemdescription'] = str(x.itemdescription)
M2Mldic2[x.id] = M2Mdic
答案 2 :(得分:1)
为什么你需要中间词典呢?这完全是多余的
M2mDict={}
for x in self.pendingapr:
M2Mldic2[x.id] = str(x.itemdescription)
或更多Pythonic方式(来自v.2.7)
M2mDict= = {x.id : str(x.itemdescription) for x in self.pendingapr}