Python 合并词典的部分以进行比较

Python 合并词典的部分以进行比较,python,dictionary,data-manipulation,Python,Dictionary,Data Manipulation,我有一个实例,我想比较嵌套在另一个字典中的字典之间的数据。嵌套字典的格式都相同;看起来是这样的: students = {"student_1": {"id":1009, "first_name": "Alex", "last_name": "Robertson", "Assignments":[("Assignment_1",3),("Assignment_2", 4),

我有一个实例,我想比较嵌套在另一个字典中的字典之间的数据。嵌套字典的格式都相同;看起来是这样的:

students = {"student_1": {"id":1009, "first_name": "Alex", "last_name": "Robertson",
                          "Assignments":[("Assignment_1",3),("Assignment_2", 4),
                                         ("Assignment_3", 2), ("Assignment_4", 4)]},
            "student_2" :{"id":2009, "first_name": "Dave", "last_name": "Davidson",
                          "Assignments":[("Assignment_1",2),("Assignment_2", 1),
                                         ("Assignment_3", 2), ("Assignment_4", 4)]},
            "student_3" :{"id":3009, "first_name": "Hayden", "last_name": "Miles",
                          "Assignments":[("Assignment_1",1),("Assignment_2", 1),
                                         ("Assignment_3", 1), ("Assignment_4", 1)]},
            "student_4" :{"id":4009, "first_name": "Randy", "last_name": "Bacon",
                          "Assignments":[("Assignment_1",2),("Assignment_2", 2),
                                         ("Assignment_3", 2), ("Assignment_4", 4)]},
            "student_5" :{"id":5009, "first_name": "Katrina", "last_name": "Lopez",
                          "Assignments":[("Assignment_1",2),("Assignment_2", 1),
                                         ("Assignment_3", 2), ("Assignment_4", 3)]},
            "student_6" :{"id":6009, "first_name": "Tessa", "last_name": "Franklin",
                          "Assignments":[("Assignment_1",1),("Assignment_2", 4),
                                         ("Assignment_3", 2), ("Assignment_4", 4)]}}
我想做的是指定一个特定的作业(元组中的字符串),取出与该作业相关的所有六个等级,并将其与学生的ID号配对。例如,如果我想要作业_1的分数,结果将是一个元组列表,其中包含作业_1的ID和分数,或者学生的有序列表。非常感谢您的帮助,这是我一直在尝试使用的:

def highest_n_grades(dict, tuple, int):
    save_data = []
    for d in dict:
     for k in d:
        if k == "Assignments":
            if [0] == tuple:
                data = d["id"],d["first_name"],d["last_name"],k[1]
                save_data.append(data)
    return save_data

代码将运行,但只返回空括号。

您的if语句将始终为False,因为您将一个值的列表与一个字符串进行比较

您可以这样尝试(假设“tuple”是字符串):


为了便于理解,我修改了你的代码。此代码提取给定作业的学生成绩

def highest_n_grades(dict, tuple):
save_data = []
for d_id,d_info in dict.items():
    assignments = d_info['Assignments']
    for el in assignments:
        if el[0] == tuple:
            data = d_info["id"],d_info["first_name"],d_info["last_name"],el[1]
            save_data.append(data)
return save_data
用例:

highest_n_grades(students,'Assignment_1')

 [(1009, 'Alex', 'Robertson', 3),
 (2009, 'Dave', 'Davidson', 2),
 (3009, 'Hayden', 'Miles', 1),
 (4009, 'Randy', 'Bacon', 2),
 (5009, 'Katrina', 'Lopez', 2),
 (6009, 'Tessa', 'Franklin', 1)]

如果[0]==tuple,您对该函数的预期输入和预期输出是什么意思?如果“Assignments”的第一个元素与tuple相同(tuple是一个可以在开头定义的字符串)。
highest_n_grades(students,'Assignment_1')

 [(1009, 'Alex', 'Robertson', 3),
 (2009, 'Dave', 'Davidson', 2),
 (3009, 'Hayden', 'Miles', 1),
 (4009, 'Randy', 'Bacon', 2),
 (5009, 'Katrina', 'Lopez', 2),
 (6009, 'Tessa', 'Franklin', 1)]