Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在字典中使用键_Python_Algorithm_List_Dictionary_Key - Fatal编程技术网

Python 如何在字典中使用键

Python 如何在字典中使用键,python,algorithm,list,dictionary,key,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/19

各位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的最后一个元素


我希望能得到一些帮助,我已经为此辛苦了几天了

一个问题是您使用了错误的索引。平均绩点位于指数4

if ID[id][5] > askthemajor:
    # you are summing the hours, not gpa here
    gpas = float(ID[id][5])
而且,递归只会使这个函数比它需要的更复杂。请尝试以下功能:

def average_gpa(hour, ids, work):
    gpas = [float(ids[id][4]) for hr, id in work.items() if hr >= hour]
    return sum(gpas)/len(gpas)

# prints the average gpa with study time >= 10 hrs
print average_gpa(10, ID, Work)

首先,您的字典ID不应该包含这样级别的信息。 思考对象。例如,您将有一个类Person(或Student)包含:{name、FirstName等…和…workingTime}->惊奇地发现您不需要两个字典

Rq:要具体一点,因为我们不知道什么是工作的关键。(我想是几个小时。但为什么要把它存储在另一个dict中?)

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

避免使用幻数。对你来说,5是个神奇的数字。我们可以猜出它的含义。但我们不必猜测。(现在您可以看到传递对象的实用程序?字段已命名)

您还应该将方法模块化。为提高可读性,请坚持单一责任原则。一种方法=一个目的。 这里主要计算平均值,但也进行过滤。创建一个新方法按工作时间筛选学生(self、student、askThemajor):

也就是说,我看不出主语对应什么。(你能帮我吗?) 另外,averagemajordata=Major.keys()已经是一个列表。 gpas=float(ID[ID][5])只是一个赋值。 你错过了一个循环,从工作超过X小时的学生那里获得了所有的GPA。 这就是过滤方法的目的

计算部分是正确的

最后但并非最不重要的一点是,既然majoraveragespecific只接受两个参数,majoraveragespecific(“Math”,Major,ID)如何工作

总之,你应该看看这个链接。
用Python编写干净的代码对我帮助很大

你能解释一下你的字典吗?键和值代表什么?这是你第二次发布这个(几乎完全正确的)问题——我猜是因为你以前没有得到你需要的答案。请给我们反馈,以便我们能够按照您的期望回答您的问题。此外,python的惯例是使用所有小写字母,单词之间用一个小数分隔。使用'id'和'work'代替'id'和'work'。id[id][4]应该是id[id][5]@Julius,实际上它以前是正确的斯塔尔,林戈是一根弦。如果你真的很挣扎,就告诉我。我可以在几分钟内编写代码并向您解释。但现在我要睡觉了:)看来是我梦见了。或者它消失了。我想那是在他以前的帖子里。这是OP的第二篇帖子,第一篇帖子在OP没有说任何话的情况下被放弃了。。。所以我们可能只是在浪费时间。但我很确定我看到了一条主要的格言。我认为user2324234再次编辑了它的代码。当我醒来时,它不见了。但无论如何。。。这不是我评论的主要部分。当然,你仍然可以看到他之前帖子的残余。在他当前的代码中,askthemajor变量请求小时数。。。哈哈