使用拆分的元组/w Python迭代时未能填充字典



如果我试图通过从元组中分离术语来填充字典,我不明白什么是追加,请提供一些帮助。

这里的元组:

for i in tpl_walllg:
print(i)
(11001, 43.27)
(11003, 5.13)
(11004, 23.62)
(11005, 5.22)

当我对它进行迭代时,通过拆分项并放入表单,它就起作用了:

for i in tpl_walllg:
print("Wall {id} / {lg}m".format(id=i[0], lg=i[1]))
Wall 11001 / 43.27m
Wall 11003 / 5.13m
Wall 11004 / 23.62m
Wall 11005 / 5.22m

所以我决定用这个方法来填充一个预成形的字典,元组的第一个术语是dict的"根"键,第二个术语是受影响的值。

for i in tpl_walllg:
wm[i[0]]['propriétés']['géo']['lg'] = i[1]

迭代有效,但为什么值相同(最后一面墙(?看看:

for i in tpl_walllg:
print(wm[i[0]]['propriétés']['géo']['lg'])
5.22
5.22
5.22
5.22

并输入形式:

for i in tab_wallID:
print('The wall n°{id} is {lg}m long'.format(id=i, lg=wm[i]['propriétés']['géo']['lg']))
The wall n°11001 is 5.22m long
The wall n°11003 is 5.22m long
The wall n°11004 is 5.22m long
The wall n°11005 is 5.22m long

这里tab_wallID只是wallID的列表。

下面是判决书大楼:

wm = {}  # Création d'un dictionnaire (wm : wall matrix)
dic_prop = {'géo': {'ep': float(),  # wall tickness
'lg': float(),  # wall lenght
'ht': float()  # wall height
},
'méca': {'fck': int(),
# characteristic compressive strength of concrete
'fyk': int()
# characteristic yield strength of reinforcement
},
'spatiale': {}  # not used yet
} 

for i in tab_wallID:
wm[i] = {'propriétés': dic_prop,
'torseurs': dic_comb
}

之所以会发生这种情况,是因为当您构建wm字典时,您指向的是同一个dic_prop对象。这就是为什么在循环时,相同的属性字典会随着每个新的i[1]而连续更新。

一种解决方法是将构造wn的方式更改为字典文字,类似于:

for i in tab_wallID:
wm[i] = {'propriétés': {'géo': {'lg': float()}}}

编辑:

另一种方法可以是在每次将dict_prop字典分配给密钥时复制它,例如:

import copy
for i in tab_wallID:
wm[i] = {'propriétés': copy.deepcopy(dic_prop)}

最新更新