2016-12-06 73 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