【问题标题】:Is there a way to add a file which has similar ids to a dictionary?有没有办法将具有相似 ID 的文件添加到字典中?
【发布时间】:2021-07-11 22:10:18
【问题描述】:

我正在从文件中检索成绩,我想将它们插入到以 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}}

我怎样才能做到这一点?

【问题讨论】:

  • 更改了变量,v=g[c] 甚至不相关。
  • 想要的结果不应该是{10103: [4.0, 3.75, 3.0]}吗?
  • 是的,问题出在 defaultdict(list) 上,但是你互换了变量,但那是我的错,应该写得更好。谢谢。
  • 我很确定我的 v = g[c] 对原始变量是正确的。
  • 好吧,不好意思问你了,哈哈。

标签: python file dictionary collections defaultdict


【解决方案1】:

您需要为defaultdict指定工厂:

l = defaultdict(list)

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

您无需遍历字典 g。由于grade是key,所以直接使用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-24
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    • 2011-11-22
    • 1970-01-01
    • 2013-01-04
    • 2022-01-20
    相关资源
    最近更新 更多