2014-11-22 48 views
1

我有看起來像這樣的文本文件:如何導入文本文件作爲字典蟒蛇

0 1 
0 2 
0 3 
2 3 
3 4 
4 1 
.. .. 

我想使它成爲一個字典看起來像這樣

graph = { "0" : ["1", "2", "3"], 
     "1" : ["4", "0"], 
     "2" : ["0", "1", "3"], 
     "3" : ["0", "2", "4"], 
     "4" : ["1", "3"] 
    } 

文件文本列表是圖形邊緣的列表。我需要在沒有使用任何軟件包的情況下製作一張圖表。我的最終目標是計算直徑和聚類係數。但是,在開始之前,我需要創建圖表。

我嘗試到目前爲止是:

d = {} 
    with open("/Volumes/City_University/data_mining/Ecoli.txt") as f: 
     for line in f: 
      (key, val) = line.split() 
      d[int(key)] = val 
    for x in d: 
    print (x) 

結果:

471 
472 
474 
475 
476 
477 
478 
479 
480 
481 
483 
484 
485 
486 
487 

感謝

回答

0

至於另外一個可能的選項,你也可以使用defaultdict這裏:

from collections import defaultdict 
d = defaultdict(list) 
with open("/Volumes/City_University/data_mining/Ecoli.txt") as f: 
    for line in f: 
     key, val = line.split() 
     d[key].append(val) 
for k, v in d.items(): 
    print(k, v) 

這使您無需檢查密鑰是否已在d中,也可以爲您節省幾行。

+0

這個效果比較好,我在結果中也發現了0鍵 – Arslan 2014-11-22 13:43:35

+0

太好了。我很高興你找到了它。 – 2014-11-22 13:44:26

1
d = {} 
with open("/Volumes/City_University/data_mining/Ecoli.txt") as f: 
    for line in f: 
     (key, val) = line.split() 
     if key in d: 
      d[key].append(val) 
     else: 
      d[key] = [val] 
for x, v in d.items(): 
print x, v 

說明:

只需製作d列表的值,然後追加到列表中。

+0

太棒了,非常感謝你,它似乎有效。唯一的問題是我找不到密鑰0 ...我如何提取打印結果到一個txt文件,以便我可以看起來更好,看看0鍵是否也存在?再次感謝。 – Arslan 2014-11-22 13:32:40

+0

請參閱[這個問題](http://stackoverflow.com/questions/6159900/correct-way-to-write-line-to-file-in-python)。 – irrelephant 2014-11-22 13:35:13

+0

@Andrea Sportelli您不需要打印到文件以檢查密鑰是否存在。只需在代碼中添加一行:'print d.get('0')'。 – 2014-11-22 13:42:45

0

試試這個:

d = {} 
with open("/Volumes/City_University/data_mining/Ecoli.txt") as f: 
    for line in f: 
     (key, val) = line.split() 
     if key in d: 
      d[key].append(val) 
     else: 
      d[key] = [val] 
for x in d: 
    print x,d[x] 

如果密鑰在字典中找到它會追加其他值創建一個新的對

0
import numpy as np 
file_name='text_file.txt' 
key_column=0 

dat=np.genfromtxt(file_name,dtype=str) 
d={i:[] for i in np.unique(dat[:,key_column])} 

for row in dat: 
    for key in d.keys(): 
     if row[key_column]==key :d[key].append(row[1]) 

print d 
+0

當鑰匙數量過大時,這可能對我很有好處,可以做兩次 – 2014-11-22 13:53:17