2012-06-05 68 views
0

所以例如我有一個帶有電話號碼,姓名,地址的文本文件。 看起來像這樣在每一行將文本文件中的文本轉換爲字典中的列表

555-667282,bill higs,67 hilltop 

555-328382,john paul,85 big road 

555-457645,zac fry,45 tony's rd 

555-457645,kim fry,45 tony's rd 

結束返回,我希望把它全部在一本字典和詞典中的電話號碼是關鍵,有名稱和地址是一個列表。 所以如果我想打印字典,它會看起來像這樣。這將是代碼來做到這一點

{555-667282: '法案higs', '67山頂'],555-328382: '約翰·保', '85大馬路'],555- 457645:[ 'ZAC炒', '45 Tony的RD'],[ '金炒', '45 Tony的RD']}

+1

你試過用csv嗎? –

回答

2
dicto = {} 

with open('your_file.txt') as f: 
    for line in f: 
     s_line = line.rstrip().split(',') 
     dicto[s_line[0]] = s_line[1:] 

編輯:

爲了處理情況下,有多個與一個電話號碼相關的條目:

from collections import defaultdict 

dicto = defaultdict(list) 

with open('your_file.txt') as f: 
    for line in f: 
     s_line = line.rstrip().split(',') 
     dicto[s_line[0]].append(s_line[1:]) 
+0

這不能正確處理具有相同電話號碼的兩個條目的情況。 – martineau

+0

我錯過了。感謝您指出了這一點。我編輯了我的帖子來解決這一問題。 – Akavall

1

此文件格式是標準庫中csv模塊的設計目的。但是,由於字典鍵只能映射到一件事物,因此不能按照自己的方式佈置字典。一個簡單的方法來解決該限制是對每個電話號碼映射到一個列表的列表,如圖示例代碼和輸出如下:

import csv 

result = {} 
with open('numbers.txt', 'rb') as input: 
    for phone_number, name, address in csv.reader(input): 
     if phone_number in result: 
      result[phone_number] += [[name, address]] 
     else: 
      result[phone_number] = [[name, address]] 

print result 

輸出:

{'555-328382': [['john paul', '85 big road']], 
'555-457645': [['zac fry', "45 tony's rd"], ['kim fry', "45 tony's rd"]], 
'555-667282': [['bill higs', '67 hilltop']]} 

內的代碼內部for循環可以通過使用稱爲defaultdict的另一個標準庫類簡化,該類是dict的子類。只要引用了不存在的字典值,它們就會自動將字典條目初始化爲指定的默認值。這裏有一個如何能夠被應用到這個例子:

import collections 
import csv 

result = collections.defaultdict(list) 
with open('numbers.txt', 'rb') as input: 
    for phone_number, name, address in csv.reader(input): 
     result[phone_number] += [[name, address]] 

print result 

輸出的第二個版本:

defaultdict(<type 'list'>, { 
'555-328382': [['john paul', '85 big road']], 
'555-457645': [['zac fry', "45 tony's rd"], ['kim fry', "45 tony's rd"]], 
'555-667282': [['bill higs', '67 hilltop']]}) 

defaultdict對象可以以其它方式使用,就像你的代碼的其餘部分正常的字典。

相關問題