2016-10-15 12 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'}} 

のようなデータを作成するPythonにおける辞書は、私が

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'は、タイプに建てられています。また、2番目のforループのインデントをチェックすることもできますか?私は、コピー貼り付けが2番目のループのインデントを台無しにしている可能性があると思う。 – 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の中に空のdictを作成しようとしていて、次にbと同じことをやっています。私は正しい? –

+0

setdefaultは、既定値(この場合は空のdict)を持つdictを作成します。 –

+0

setdefault()は、指定されたキーに関連するエントリがない場合にのみ新しいエントリ(この場合は空の辞書)を作成します。 それから、エントリ(新しく作成された空または既存のもの)が返されるので、新しいリレーションをエントリに入れます(ネストされた辞書です)。 – Slava

関連する問題