您好,各位 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。 这就是过滤方法的目的。
计算部分是对的。
最后但并非最不重要的一点是,majoraveragespecific("Math", Major, ID) 如何工作,因为 majoraveragespecific 只接受两个参数?
总而言之,您应该查看此链接。 http://starship.python.net/~goodger/projects/pycon/2007/idiomatic/handout.html 用 Python 编写干净的代码对我帮助很大。
关于python - 我将如何使用字典中的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20460100/