有没有办法将具有相似 ID 的文件添加到字典中?
Is there a way to add a file which has similar ids to a dictionary?
我正在从文件中检索成绩,我想将它们插入到以 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
我正在从文件中检索成绩,我想将它们插入到以 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