我有一个数据表如下:
A B C
type1 A1 B1 C1
type2 A2 B2 C2
Run Code Online (Sandbox Code Playgroud)
我使用下面的代码
d={}
D={}
h = ['A','B','C']
type1=['A1','B1','C1']
type2=['A2','B2','C2']
for i,val in enumerate(h):
d['Type1'] = type1[i]
d['Type2'] = type2[i]
D[val]=d
print('loop',i,'\nd:',d,'\nD:',D,'\n\n====')
#print(D)
Run Code Online (Sandbox Code Playgroud)
我希望得到以下dict作为结果:
{'A':{'Type1':'A1','Type2':'A2'},'B':{'Type1':'B1','Type2':B2},'C':{'Type1':C1,'Type2':'C2'},}
Run Code Online (Sandbox Code Playgroud)
但是,输出是:
{'A': {'Type1': 'C1', 'Type2': 'C2'}, 'B': {'Type1': 'C1', 'Type2': 'C2'}, 'C': {'Type1': 'C1', 'Type2': 'C2'}}
Run Code Online (Sandbox Code Playgroud)
我逻辑中的错误是什么?
我无法弄清楚那里有什么问题.
我在循环中添加了一个打印件.
loop 0
d: {'Type1': 'A1', 'Type2': 'A2'}
D: {'A': {'Type1': 'A1', 'Type2': 'A2'}}
====
loop 1
d: {'Type1': 'B1', 'Type2': 'B2'}
D: {'A': {'Type1': 'B1', 'Type2': 'B2'}, 'B': {'Type1': 'B1', 'Type2': 'B2'}}
====
loop 2
d: {'Type1': 'C1', 'Type2': 'C2'}
D: {'A': {'Type1': 'C1', 'Type2': 'C2'}, 'B': {'Type1': 'C1', 'Type2': 'C2'}, 'C': {'Type1': 'C1', 'Type2': 'C2'}}
====
Run Code Online (Sandbox Code Playgroud)
从输出中,d在每个循环中都是正确的但是D在非常循环中得到了改变!不知道为什么会这样.
您每次迭代都使用相同的字典.您应该将d的定义移动到循环中.
for i,val in enumerate(h):
d = {}
...
Run Code Online (Sandbox Code Playgroud)