python - 我将如何使用字典中的键

标签 python algorithm list dictionary key

您好,各位 stackoverflow 用户! 假设我有一本字典

ID = {'1130327': ['Starr, Ringo', '1130327', '10/20/1958', 'Music', '2.05', '20'], '0034728': ['Armstrong, Lance', '0034728', '07/21/1993', 'Computer Science', '3.47', '10'], '7733469': ['Gaga, Lady', '7733469', '10/10/1980', 'Computer Science', '1.20', '40'], '9939456': ['Childs, Julia', '9939456', '12/12/1993', 'Computer Science', '3.89', '8'], '2245338': ['Johnson, Dwayne', '2245338', '08/30/1975', 'Music', '3.95', '2'], '4357349': ['Cronkite, Walter', '4357349', '10/02/1992', 'Math', '3.21', '0'], '8453392': ['Williams, Serena', '8453392', '02/14/1994', 'Math', '3.09', '5']}

我还有一本字典

Work = {'8': '9939456', '40': '7733469', '10': '0034728', '0': '4357349', '2': '2245338', '5': '8453392', '20': '1130327'}

我正在尝试计算每周工作超过 X 小时的所有学生的平均 GPA。我的程序要求用户指定小时数,然后计算并打印答案。

def majoraveragespecific(Work, ID):
    averagemajordata = Work.keys()
    IDish= ID.values()

    averagemajorlist = list(averagemajordata)
    print()
    print()
    askthemajor = eval(input("For over which number of hours,  do you want to calculate average gpa hours for?: "))
    print("Alright, let's compute the average gpa hours for people who work over",askthemajor,"hours")
    if ID[id][5] > askthemajor:
        gpas = float(ID[id][5])
    return sum(gpas)/len(gpas)


print(majoraveragespecific(Work, ID)))

我不确定我是否使用了正确的方法..?

每个学生的 ID 号都是特定的,工作时间是字典中每个 ID 的最后一个元素。

我将不胜感激,我已经为此辛苦工作了几天。

最佳答案

首先,你的字典ID不应该包含这种级别的信息。 思考对象。例如,您将有一个包含 :{ name, FirstName, etc... AND... workingTime} 的 Person(或 Student)类 -> 令人惊讶的是您不需要 2 个词典。

Rq:要具体,因为我们不知道什么代表了 Work 的关键。 (我猜是几个小时。但为什么要将它存储在另一个 dict 中?)

您的 ID dict 将以整数作为键,将 Person 实例作为值。 顺便说一下,ID 不是一个显式名称。人或学生更适合。尽管 ID 是键,但您的字典的目标是按 ID 存储学生。

避免魔数(Magic Number)。 5 在你的情况下是一个神奇的数字。我们可以猜测它的含义。但我们不必猜测。 (现在您看到了传递对象的实用程序了吗?字段已命名)。

您还应该模块化您的方法。为了更好的可读性坚持单一职责原则。一种方法=一个目的。 这里 majoraveragespecific 计算平均值但也进行过滤。创建一个新方法 filter_student_by_working_hours(self, students, askThemajor): ...

就是说,我看不到 Major 指令对应的是什么。 (你能帮我吗?) averagemajordata = Major.keys() 也已经是一个列表。 gpas = float(ID[id][5]) 只是一个赋值。 你错过了某个地方的循环来汇总工作超过 X 小时的学生的所有 GPA。 这就是过滤方法的目的。

计算部分是对的。

最后但并非最不重要的一点是,ma​​joraveragespecific("Math", Major, ID) 如何工作,因为 majoraveragespecific 只接受两个参数?

总而言之,您应该查看此链接。 http://starship.python.net/~goodger/projects/pycon/2007/idiomatic/handout.html 用 Python 编写干净的代码对我帮助很大。

关于python - 我将如何使用字典中的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20460100/

相关文章:

Python 无法在 r+ 模式下打开 11gb csv 但在 r 模式下打开

linux - 在不同目录中查找具有相同名称的文件并计算重复项

r - 访问列表或数据帧元素时括号 [ ] 和双括号 [[ ]] 之间的区别

python - 如何让 `pip install --editable` 运行 sdist 而不是开发?

python - os.system 调用不起作用?

python - 使用在 file1 中找到的数据更新 file2 中的记录

C++ 包含类的排序列表

algorithm - 概率算法 : Finding probable correct item in a list (e. g John, John, Jon)

python - 非常简单的Python函数

algorithm - 将数字均匀分配到组中的最佳策略