2016-10-15 169 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 

所以一个节点连接到其他有一定容量的节点。所以,我想在python字典它创建类似这样的

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'是一个内置的类型,所以这个变量应该改名。另外,你还可以检查第二个for循环的缩进吗?我怀疑复制粘贴可能已经搞乱了第二个循环的缩进。 – 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

是的,这是行得通的。谢谢!很多所以,你正在采取一种价值观,并试图在d内创建一个空字典,然后再对b做同样的处理。我对吗? –

+0

setdefault将创建一个带默认值的字典(在这种情况下为空字典),如果它尚未创建 –

+0

正确,setdefault()仅在没有与给定的键相关联的条目时创建新条目(在这种情况下为空字典) 。 然后它返回条目(新创建的空或现有的条目),所以我们在条目(它是嵌套字典)中添加新的关系。 – Slava