2016-10-15 2 views
0

У меня есть данные для узлов в формате csv. Я хочу создать словарь для анализа. Данные, которые у меня есть,Создание вложенного словаря с использованием python

Init node Term node Capacity 
    1 2 25900.20064 
    1 3 23403.47319 
    2 1 25900.20064 
    2 6 4958.180928 
    3 1 23403.47319 
    3 4 17110.52372 
    3 12 23403.47319 
    4 3 17110.52372 
    4 5 17782.7941 

Таким образом, один узел подключен к другому узлу, имеющему некоторую пропускную способность. Итак, я хочу словарь в питоне, который создает данные, как этот

graph = {'1': {'2': 25900.20064, '3': 23403.47319}, 
     '2': {'1': 25900.20064, '6':4958.180928}, 
     '3': {'1': 23403.47319, '4'}} 

Я попытался следующий код, чтобы сделать это ..

import xlrd 
file_location = "C:/Users/12/Desktop/SiouxFalls_net1.xlsx" 
workbook = xlrd.open_workbook(file_location) 
sheet = workbook.sheet_by_index(0) 
dict = {} 
z = {} 


for rows in range(sheet.nrows): 
    a = sheet.cell_value(rows,0) 
    dict[a] = {} 
    for rows in range(sheet.nrows): 
     b = sheet.cell_value(rows,1) 
     c = sheet.cell_value(rows, 2) 
     dict[a][b] = c 

Но у меня возникли проблемы в подбирая уникальное значение из первого столбца и назначить другие связанные с ним узлы. Пожалуйста помоги!

print(dict) 
+0

'dict' встроенный тип, так что переменная должна быть переименована. Кроме того, вы могли бы также проверить отступ второго цикла? Я подозреваю, что копия-паста, возможно, испортила отступ второго цикла. – rlee827

+0

Да, отступ здесь неправильный, но я не получаю правильный словарь. Я просто хочу знать, можно ли создать в формате хочу –

ответ

1

Попробуйте этот цикл:

sheet = workbook.sheet_by_index(0) 
d = {} 
for rows in range(sheet.nrows): 
    a = sheet.cell_value(rows, 0) 
    b = sheet.cell_value(rows, 1) 
    c = sheet.cell_value(rows, 2) 

    d.setdefault(a, {})[b] = c 
    d.setdefault(b, {})[a] = c 
+0

Да, это работает. Благодаря! много. Итак, вы принимаете значения и пытаетесь создать пустой dict внутри d, а затем снова делаете то же самое с b. Я прав? –

+0

setdefault создаст dict со значением по умолчанию (в этом случае будет пустой dict), если его еще не было создано –

+0

Correct, setdefault() создает новую запись (пустой словарь в этом случае), только если нет такой записи, связанной с данным ключом , Затем он возвращает запись (либо вновь созданную пустую, либо существующую), поэтому мы добавляем в запись (которая является вложенным словарем) новое отношение. – Slava

 Смежные вопросы

  • Нет связанных вопросов^_^