Как создать вложенный словарь без потери данных? - PullRequest
0 голосов
/ 17 мая 2019

У меня есть файл, который содержит значения расстояния для набора узлов в матричной форме.Я извлек эти значения и хочу сохранить их во вложенном словаре.

Я уже пробовал, но мой словарь содержит только значения из последней итерации.

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 Ответ

1 голос
/ 17 мая 2019

Вы заново инициализируете второй уровень, диктуя каждую итерацию вашего внутреннего цикла. Вот что заставляет его «терять данные».

Вместо этого вы можете использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...