有没有办法将具有相似 ID 的文件添加到字典中?

问题描述

我正在从文件中检索成绩,我想将它们插入到以 id 为键的字典中,这样做的最佳方法是什么?下面是代码

from HW08_Swayam_Shah import file_reader
import os
from collections import defaultdict
def grades(path):
    l= defaultdict()
    g = {"A":4.0,"A-":3.75,"B+":3.25,"B":3.0,"B-":2.75,"C+":2.25,"C-":0,"D+":0,"D":0,"D-":0,"F":0}
    for id,course,grade,prof_id in file_reader(
            os.path.join(path,"g.txt"),fields=4,sep='|',header=False):
        for k,v in g.items():
            if grade==k:
                l[id].append(v)
    return l
x = grades("C://Users/Documents/Downloads")
print(x)

以下是我使用的输入文件

10103|SSW 567|A|98765
10103|SSW 564|A-|98764
10103|SSW 687|B|98764

如您所见,所有列的第一个字段都相似,但我需要将此作为我的关键。显然字典会抛出一个错误,但是当键相同时,我希望它将它添加到下一个值。类似的东西:

{10103:{A,A-,B}}

我怎样才能做到这一点?

解决方法

您需要为 defaultdict 指定工厂:

l = defaultdict(list)

如果字典项不存在,这将创建一个空列表,然后 append() 将起作用。

您不需要遍历字典 g。由于 grade 是一个键,所以只需使用 g[grade] 来获取值。

def grades(path):
    l= defaultdict(list)
    g = {"A":4.0,"A-":3.75,"B+":3.25,"B":3.0,"B-":2.75,"C+":2.25,"C-":0,"D+":0,"D":0,"D-":0,"F":0}
    for id,course,grade,prof_id in file_reader(
            os.path.join(path,"g.txt"),fields=4,sep='|',header=False):
        grade_numeric = g[grade]
        l[id].append(grade_numeric)
    return l

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...