2013-07-15 60 views
2

所以我的文件看起來像這樣:的Python - 創建從外部文本文件的字典

0 1 
0 2 
0 34 
0 67 
1 98 
1 67 
1 87 
2 23 
2 45 
2 98 
... 

等。我的問題是,我怎麼可以從這個文本文件的字典,應該是這樣的:

dict = {'0':['1', '2', '34', '67'] 
     '1':['98', '67', '87'] 
     '2':['23', '45', '98'] 
     '3':['x','x','x']} 
+0

不使用'dict'作爲變量名稱,因爲它是一個內置類型。改用'Dict'。 –

+0

@PeterVaro使用'dict'是不好的,你是對的。但'Dict'並不好多少​​;它意在表示一個類。 – glglgl

+1

@glglgl你是對的,如果我命名一個參數,我總是使用'dictionary'或'd',如果我用它作爲'普通'變量,則使用一個冗長的名字。儘管使用CapitalCaseWords作爲類是無關緊要的,但是一個約定。一個好的,我不得不說,但不是一個規則! –

回答

4

假設文件名爲test.txt

from collections import defaultdict 
import csv 


data = defaultdict(list) 
with open("test.txt", "r") as f: 
    reader = csv.reader(f, delimiter=" ") 
    for row in reader: 
     data[row[0]].append(row[1]) 

那麼data值將是:

{ 
'0': ['1', '2', '34', '67'], 
'1': ['98', '67', '87'], 
'2': ['23', '45', '98'], 
... 
} 
0
from collections import defaultdict 
res = defaultdict(list) 
with open(file) as f: 
    for line in f: 
     temp = line.split() 
     res[temp[0]].append(temp[1]) 
+1

'line.strip().span()'相當於'line.split()'只有後者更快更易讀。 –

+0

謝謝。我將編輯它。@ InbarRose – zhangyangyu

1

一個非常有趣,優雅的解決方案:

>>> from collections import defaultdict 
>>> d = defaultdict(list) 
>>> with open(external_file) as f: 
    map(lambda x: d[x[0]].append(x[1]), map(str.split, f)) 
>>> d 
defaultdict(<type 'list'>, {'1': ['98', '67', '87'], '0': ['1', '2', '34', '67'], '2': ['23', '45', '98']})