2016-12-06 83 views
0

編寫一個函數parse,它接受一個文件名並將每行使用逗號分隔值格式解析爲字典的字典。給出的示例文件是:讀取文件並將其解析爲字典的函數

id,age,name 
100,31,George 
101,47,Herbert 
103,72,Harriet 

預期輸出字典是:

{'103': {'name': 'Harriet', 'age': '72', 'id': '103'}, '100': {'name': 
'George', 'age': '31', 'id': '100'}, '101': {'name': 'Herbert', 'age': '47', 
'id': '101'}} 

確保使用字符串的.strip()方法來從每行中刪除換行符結束時,你解析。

提示:您應該粘貼上一個問題的data_dictionary函數,並從您的解析函數中調用它來幫助每一行。

例如:

測試結果

print(sorted(d["100"].items()))= = [('age', '31'), ('id', '100'), ('name', 'George')] 
print(sorted(d["101"].items()))= [('age', '47'), ('id', '101'), ('name', 'Herbert')] 
print(sorted(d["103"].items())) = [('age', '72'), ('id', '103'), ('name', 'Harriet')] 

這是我的代碼,我有。 Data_dictionary是完美的,但需要解析。請幫忙解決不了!

def data_dictionary(keys,values): 

    d = {} 
    for i in range(len(keys)): 
     d[keys[i]] = values[i] 
    return d 


def parse(file): 

    d = {} 
    with open(file) as file_name: 
     for line in file_name: 
      keys = (item.strip() for item in line.split(',')) 
     for line in file_name: 
      values = (item.strip() for item in line.split('/n')) 
      data_dictionary(keys,values) 
      return d 
+0

你'id'作爲主鍵,那麼爲什麼你需要把它添加到字典中的身體嗎? – Chinny84

+0

爲什麼你有2個循環?只需讀取第一行即可獲得密鑰然後循環。 – polku

回答

0

你用發生器表達式做奇怪的事情。這是一個csv文件。使用csv模塊讀取它。

import csv 

def parse(file): 
    d = {} 
    with open(file) as f: 
     r = csv.reader(f) 
     _ = next(r) #consume the headers 
     for line in r: 
      d.update({d[0]: {'age': d[1], 'name':d[2]}}) 

    return d 

或者,我們可以使用csv.DictReader

def parse(file): 
    d = {} 
    with open(file) as f: 
     r = csv.DictReader(f) 
     for line in r: 
      id = line.pop('id') 
      d.update({id: line}) 
    return d 
相關問題