读取文件并将其解析为字典的函数
问题描述:
编写一个函数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
答
你用发生器表达式做奇怪的事情。这是一个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
你'id'作为主键,那么为什么你需要把它添加到字典中的身体吗? – Chinny84
为什么你有2个循环?只需读取第一行即可获得密钥然后循环。 – polku