如何创建嵌套字典而不丢失数据?

时间:2019-05-16 22:04:43

标签: python dictionary nested

我有一个文件,其中包含矩阵形式的一组节点的距离值。我提取了这些值,并希望将它们保存在嵌套字典中。

我已经尝试过,但是我的字典中仅包含上次迭代中的值。

d={}
i, j = 0,0
for f in tmp:
    for k in range(3,len(f),3):

        d[nodes[i]] = {}
        d[nodes[i]][nodes[j]]= f[k-2]+f[k-1]        


        j += 1
    i += 1
    j = 0


return d

 d={'A': {'P': '5'},
    'B': {'P': '3'},
    'C': {'P': '6'},
    'D': {'P': '5'},
    'E': {'P': '3'},
    'F': {'P': '33'},
    'G': {'P': '21'},
    'H': {'P': '39'},
    'I': {'P': '4'}}

但是d应该包含:

d={"A":{"A":5,"B":6, "C":7, "D":8, "E":9, "F":10, "G":11;"H":12, "I":13},
   "B":{"A":3,"B":4, "C":5, "D":8, "E":9, "F":14, "G":11;"H":12, 
        "I":16}},.....

1 个答案:

答案 0 :(得分:1)

您将在内部循环的每次迭代中重新初始化第二级dict。这就是导致它“丢失数据”的原因。

相反,您可以使用defaultdict:

from collections import defaultdict

d = defaultdict(dict)
i, j = 0,0
for f in tmp:
    for k in range(3,len(f),3):
        d[nodes[i]][nodes[j]]= f[k-2]+f[k-1]        
        j += 1
    i += 1
    j = 0

return d