Python:文件内容到字典

Kar*_*kar 2 python python-3.x

编写一个函数,接受CSV文件的文件名(字符串),其中包含有关学生姓名及其四门课程成绩的信息,并返回信息字典.字典的键应该是学生的名字,值应该是他们成绩的浮点数列表.例如,如果文件的内容如下所示:

Mark,90,93,60,90
Abigail,84,50,72,75
Frank,46,83,53,79
Yohaan,47,77,74,96
Run Code Online (Sandbox Code Playgroud)

那么你的函数应该返回一个字典,如:

out_dict = {'Frank': [46.0, 83.0, 53.0, 79.0],
            'Mark': [90.0, 93.0, 60.0, 90.0],
            'Yohaan': [47.0, 77.0, 74.0, 96.0],
            'Abigail': [84.0, 50.0, 72.0, 75.0]}
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

def dict_from_file (file_name):
    file_pointer = open(file_name, 'r')
    data = file_pointer.readlines()
    print (data)
    output_dict = {}
    for line in data:

    file_pointer.close()
    return (output_dict)

#Main Program
file_name = input("Enter the exact file name with its extension (.i.e., .txt): ")
result = dict_from_file (file_name)
print (result)
Run Code Online (Sandbox Code Playgroud)

如您所见,for循环中缺少语句.问题是我找不到任何逻辑来首先从文件中获取输入并将其粘贴到字典中.如果我计划提取每一行,我将如何将其添加到字典中,其中名称为键,四个数字为值?

idj*_*jaw 5

要严格关注您的代码:

如果你打印出你读过的内容,你会发现你有这个:

['Mark,90,93,60,90\n', 'Abigail,84,50,72,75\n', 'Frank,46,83,53,79\n', 'Yohaan,47,77,74,96']
Run Code Online (Sandbox Code Playgroud)

因此,当您遍历列表中的每个项目时,为了保持此示例简单,您几乎可以提取第一个项目,现在将是您的密钥,然后将列表中的一部分排除在名称之外并转换每个项目项目到浮动.

所以,你几乎都在寻找:

l = line.split(',')
output_dict[l[0]] = map(float, l[1:])
Run Code Online (Sandbox Code Playgroud)

正在发生的事情是,你正在把你正在迭代的每个项目,通过拆分','成为一个列表.然后,您将获取列表中的第一项,并将其作为您的密钥.然后要分配您的值,您必须使用该map方法,该方法会将您的每个项目映射list到浮点数.

您将为每个line正在阅读的人执行该操作.

所以,最后,你会:

def dict_from_file (file_name):
    file_pointer = open(file_name, 'r')
    data = file_pointer.readlines()
    print (data)
    output_dict = {}
    for line in data:
        l = line.split(',')
        output_dict[l[0]] = map(float, l[1:])
    file_pointer.close()
    return output_dict

#Main Program
result = dict_from_file ('stuff.txt')
print (result)
Run Code Online (Sandbox Code Playgroud)

运行该代码,将为您提供:

{'Frank': [46.0, 83.0, 53.0, 79.0], 'Yohaan': [47.0, 77.0, 74.0, 96.0], 'Abigail': [84.0, 50.0, 72.0, 75.0], 'Mark': [90.0, 93.0, 60.0, 90.0]}
Run Code Online (Sandbox Code Playgroud)