Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.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_Function_Dictionary_Key_Definition - Fatal编程技术网

Python字典-调用定义

Python字典-调用定义,python,function,dictionary,key,definition,Python,Function,Dictionary,Key,Definition,因此,我的目标是拿出三本字典,以这种格式打印出来: 姓名:“姓名” 作业:“名单平均数” 测验:“名单平均数” 测试:“列表的平均值” 我把这三本字典都列在一个列表里,我很难找到它们。我想一步一步地走 因此,在查看此代码之后: lloyd = { "name": "Lloyd", "homework": [90.0, 97.0, 75.0, 92.0], "quizzes": [88.0, 40.0, 94.0], "tests": [75.0, 90.0] }

因此,我的目标是拿出三本字典,以这种格式打印出来:

姓名:“姓名”

作业:“名单平均数”

测验:“名单平均数”

测试:“列表的平均值”

我把这三本字典都列在一个列表里,我很难找到它们。我想一步一步地走

因此,在查看此代码之后:

lloyd = {
    "name": "Lloyd",
    "homework": [90.0, 97.0, 75.0, 92.0],
    "quizzes": [88.0, 40.0, 94.0],
    "tests": [75.0, 90.0]
}
alice = {
    "name": "Alice",
    "homework": [100.0, 92.0, 98.0, 100.0],
    "quizzes": [82.0, 83.0, 91.0],
    "tests": [89.0, 97.0]
}
tyler = {
    "name": "Tyler",
    "homework": [0.0, 87.0, 75.0, 22.0],
    "quizzes": [0.0, 75.0, 78.0],
    "tests": [100.0, 100.0]
}

students = [lloyd,alice,tyler]

def compute_grades(ourstudents):
    for student in ourstudents:
        print "Name: " + student["name"]
        print "Homework: ", sum(student["homework"]) / len(student["homework"])
        print "Quizzes: ", sum(student["quizzes"]) / len(student["quizzes"])
        print "Tests: ", sum(student["tests"]) / len(student["tests"])

compute_grades(students)
有没有一种方法我可以只做一个基本的检查,这样就可以在任何字典上使用

例如

  • 键定义是字符串吗?如果是,请打印出来
  • 关键定义是列表吗?如果是,请运行此平均功能并打印结果

  • 我基本上只是想将硬编码最小化,并提出一个更优雅的解决方案。感谢您的帮助

    您可以这样做,但是根本没有错误检查或密钥排序:

    lloyd = {
        "name": "Lloyd",
        "homework": [90.0, 97.0, 75.0, 92.0],
        "quizzes": [88.0, 40.0, 94.0],
        "tests": [75.0, 90.0]
    }
    alice = {
        "name": "Alice",
        "homework": [100.0, 92.0, 98.0, 100.0],
        "quizzes": [82.0, 83.0, 91.0],
        "tests": [89.0, 97.0]
    }
    tyler = {
        "name": "Tyler",
        "homework": [0.0, 87.0, 75.0, 22.0],
        "quizzes": [0.0, 75.0, 78.0],
        "tests": [100.0, 100.0]
    }
    
    students = [lloyd,alice,tyler]
    
    def average(data):
        return sum(data) / float(len(data))
    
    def compute_grades(students):
        for student in students:
            print('-'*23)
            for key, value in student.items():
                if isinstance(value, str):
                    formatted_value = value
                else:
                    formatted_value = average(value)
                print("%s: %s" % (key.title(), formatted_value))
    
    compute_grades(students)
    

    你可以把它包在试抓块里

    def compute_grades(ourstudents):
        for student in ourstudents:
            for field, value in student.items():
                try:
                    average=sum(value)/float(len(value))
                    print "{0}: {1}".format(field.title(), average)
                except TypeError:
                    print "{0}: {1}".format(field.title(), value)
    

    这似乎完美无瑕:

    lloyd = {
        "name": "Lloyd",
        "performance": [16.0, 19.0, 25.0, 14.4, 24.5, 16.2],
        "homework": [90.0, 97.0, 75.0, 92.0],
        "quizzes": [88.0, 40.0, 94.0],
        "tests": [75.0, 90.0]
    }
    alice = {
        "name": "Alice",
        "extra_credit": "OVER 9000!!!!",
        "research": [16, 24, 56, 78, 23],
        "missed_days": [1, 1, 2, 1],
        "homework": [100.0, 92.0, 98.0, 100.0],
        "quizzes": [82.0, 83.0, 91.0],
        "tests": [89.0, 97.0]
    }
    tyler = {
        "name": "Tyler",
        "homework": [0.0, 87.0, 75.0, 22.0],
        "quizzes": [0.0, 75.0, 78.0],
        "tests": [100.0, 100.0]
    }
    
    students = [lloyd,alice,tyler]
    def average(data):
        return sum(data) / float(len(data))
    def compute_grades(students):
        for student in students:
            print "-" * 15
            print student["name"]
            for key in student.keys():
                if isinstance(student[key], str):
                    key_value = student[key]
                else:
                    key_value = average(student[key])
                if key != "name":
                    print("%s: %s" % (key.title(), key_value))
    compute_grades(students)
    
    lloyd = {
        "name": "Lloyd",
        "performance": [16.0, 19.0, 25.0, 14.4, 24.5, 16.2],
        "homework": [90.0, 97.0, 75.0, 92.0],
        "quizzes": [88.0, 40.0, 94.0],
        "tests": [75.0, 90.0]
    }
    alice = {
        "name": "Alice",
        "extra_credit": "OVER 9000!!!!",
        "research": [16, 24, 56, 78, 23],
        "missed_days": [1, 1, 2, 1],
        "homework": [100.0, 92.0, 98.0, 100.0],
        "quizzes": [82.0, 83.0, 91.0],
        "tests": [89.0, 97.0]
    }
    tyler = {
        "name": "Tyler",
        "homework": [0.0, 87.0, 75.0, 22.0],
        "quizzes": [0.0, 75.0, 78.0],
        "tests": [100.0, 100.0]
    }
    
    students = [lloyd,alice,tyler]
    def average(data):
        return sum(data) / float(len(data))
    def compute_grades(ourstudents):
        for student in ourstudents:
            print "-" * 15
            print student["name"]
            for field, value in student.items():
                try:
                    average=sum(value)/float(len(value))
                    print "{0}: {1}".format(field.title(), average)
                except TypeError:
                    pass
    compute_grades(students)
    

    基于@septi输入和随机额外信息的测试,这似乎是完美的:

    lloyd = {
        "name": "Lloyd",
        "performance": [16.0, 19.0, 25.0, 14.4, 24.5, 16.2],
        "homework": [90.0, 97.0, 75.0, 92.0],
        "quizzes": [88.0, 40.0, 94.0],
        "tests": [75.0, 90.0]
    }
    alice = {
        "name": "Alice",
        "extra_credit": "OVER 9000!!!!",
        "research": [16, 24, 56, 78, 23],
        "missed_days": [1, 1, 2, 1],
        "homework": [100.0, 92.0, 98.0, 100.0],
        "quizzes": [82.0, 83.0, 91.0],
        "tests": [89.0, 97.0]
    }
    tyler = {
        "name": "Tyler",
        "homework": [0.0, 87.0, 75.0, 22.0],
        "quizzes": [0.0, 75.0, 78.0],
        "tests": [100.0, 100.0]
    }
    
    students = [lloyd,alice,tyler]
    def average(data):
        return sum(data) / float(len(data))
    def compute_grades(students):
        for student in students:
            print "-" * 15
            print student["name"]
            for key in student.keys():
                if isinstance(student[key], str):
                    key_value = student[key]
                else:
                    key_value = average(student[key])
                if key != "name":
                    print("%s: %s" % (key.title(), key_value))
    compute_grades(students)
    
    lloyd = {
        "name": "Lloyd",
        "performance": [16.0, 19.0, 25.0, 14.4, 24.5, 16.2],
        "homework": [90.0, 97.0, 75.0, 92.0],
        "quizzes": [88.0, 40.0, 94.0],
        "tests": [75.0, 90.0]
    }
    alice = {
        "name": "Alice",
        "extra_credit": "OVER 9000!!!!",
        "research": [16, 24, 56, 78, 23],
        "missed_days": [1, 1, 2, 1],
        "homework": [100.0, 92.0, 98.0, 100.0],
        "quizzes": [82.0, 83.0, 91.0],
        "tests": [89.0, 97.0]
    }
    tyler = {
        "name": "Tyler",
        "homework": [0.0, 87.0, 75.0, 22.0],
        "quizzes": [0.0, 75.0, 78.0],
        "tests": [100.0, 100.0]
    }
    
    students = [lloyd,alice,tyler]
    def average(data):
        return sum(data) / float(len(data))
    def compute_grades(ourstudents):
        for student in ourstudents:
            print "-" * 15
            print student["name"]
            for field, value in student.items():
                try:
                    average=sum(value)/float(len(value))
                    print "{0}: {1}".format(field.title(), average)
                except TypeError:
                    pass
    compute_grades(students)
    

    基于@Kurtis输入和随机额外信息测试

    len()
    返回一个整数,您将遭受整数除法(舍入)。你觉得这样行吗?如果不这样做:
    float(len(item[“homography”]))
    ,然后将其转换为字符串。我正在尝试更大的思考,除了在字典中之外,不必定义“homography”或“tests”或“name”。打印时,您不必将所有内容转换为字符串并将其全部添加到一起。您可以编写
    print'作业:',123
    ,而不是
    print'作业:'+str(123)
    。只需给print一些用逗号分隔的项目,它就会将所有内容转换为字符串,并自动在项目之间添加空格。那么为什么不使用
    Dictionary.keys()
    ?此外,列表不能是字典中的键(只是尝试了一下)。文档中说:
    字典是由键索引的,键可以是任何不可变的类型;字符串和数字始终可以是键。
    。所以我认为你不必担心这一点。只是一个风格评论:我不会在我们的学生:中为项目编写
    ,而是在我们的学生:
    中为学生编写
    。这样,您就不必在代码后面猜测
    项是什么。在类似的情况下使用单数和复数确实有助于提高可读性,例如,
    对于行中的行:…
    。先生,您完美地回答了我的问题。我想知道如何将所有内容都设置为变量,这样我就可以将任何字典传递给它。。。做得很好-甚至不需要解释。好极了!我会添加一个排序的student.keys(),因为顺序是不可预测的,否则就不客气了,Nicholas,尽管代码远不是优雅的;-)但它提供了一个可能的轮廓@XavierCombelle当然,还有更多需要调整的地方,正如我在帖子的第一行提到的(根据错误检查和排序)。非常有趣。。。我没有太多的时间来玩try-and-except,但它似乎是一个优雅的解决方案,可以解决我想要完成的任务。回答得好!我必须对此做更多的研究:-选择我已经接受的答案,不接受它而接受你的答案?好吧,doneOh,奇怪。。。老实说,我不知道那里发生了什么。我看到这里有些警觉。让我来修一下:-)我道歉。