python for loop和dictionary

2024-10-02 18:27:43 发布

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

在python和tryton中 我不明白为什么我不能得到我想要的值,我不知道出了什么问题。在

假设self.pendingapr有一个字段itemdescription,有3个索引,总的来说它在itemdescriptions中有smallmediumlarge。我真的不知道问题是否在for循环中:

global M2Mdic
global M2Mldic2
M2Mdic = {}
M2Mldic2 = {}
res = {}

for x in self.pendingapr:
    M2Mdic['itemdescription'] = str(x.itemdescription)
    M2Mldic2[x.id] = M2Mdic

当我打印M2Mldic2时

^{pr2}$

当我需要/期待的是

>>> {1:'small',2:'medium',3:'large'}

Tags: inselffortrytonresglobalsmallmedium
3条回答

在Python中,映射变量是引用。所以在每次迭代中,如果你修改了所有的M2Mldic2映射,因为它们都是相同的。在

我认为你的代码应该是:

#global M2Mdic
global M2Mldic2
M2Mdic = {}
M2Mldic2 = {}
res = {}

for x in self.pendingapr:
   M2Mdic = {}
   M2Mdic['itemdescription'] = str(x.itemdescription)
   M2Mldic2[x.id] = M2Mdic

将同一对象放入M2Mldic2字典中的每个值。请记住,对象通常是通过引用传递的,需要复制时需要显式地复制它们。在

for x in self.pendingapr:
    M2Mdic = {
        'itemdescription': str(x.itemdescription)
    }
    M2Mldic2[x.id] = M2Mdic

这将为M2Mldic2中的每个值创建一个单独的字典。在

为什么你需要中级词典?这完全是多余的

M2mDict={}
for x in self.pendingapr:
    M2Mldic2[x.id] = str(x.itemdescription)

或者更像Python的方式(来自v.2.7)

^{pr2}$

相关问题 更多 >