比较两个单独的字典值

时间:2019-02-04 18:07:18

标签: python list dictionary

我是Python的新手,希望弄清楚如何正确编码。我有两个词典列表,我试图查找学生ID是否存在于可以包含学生ID和其他信息的字符串中。我格式错误的方法:

confirmed_students = [{'div_school_id': 'as-dh23d7ashdh'}, {'div_school_id': 'asdas-3sdfasd'}, {'div_school_id': 'i4-d9asjcg'}] 

students = [{'student_id': 'dh23d7ashdh','name': 'First Last','student_grade': '4'}, {'student_id':'3sdfasd', 'name':...}] 

bad_list = []
for student in students:
    if student['student_id'] not in confirmed_students:
        bad_list.append({"id": student['student_id'], "name": student['name'], "grade": student['student_grade']})

执行此操作的正确方法是什么?是否应该在同一循环中遍历字典confirmed_students的列表?我只需要知道称为student_id的字典列表中的students是否存在于名为confirmed_students的字典列表中,并添加相关信息即可。

2 个答案:

答案 0 :(得分:1)

一种到达那里(可能不是最有效的)的暴力方式是遍历两个列表。检查学生的每个元素是否在 confirmed_students 中。

首先,您需要一种方法来了解学生是否在 confirmed_students 列表中。必须有匹配的钥匙。查看您的数据,似乎 confirmed_students 具有 div_school_id ,它是 student_id 和某些前缀的某种组合。

# looking at one confirmed student as an example
confirmed_student = confirmed_students[0]
# confirmed_student = {'div_school_id': 'as-dh23d7ashdh'}
# we need to split the id on the '-' and keep the last part
confirmed_student_id = confirmed_student['div_school_id'].split("-")[1]
# gives us confirmed_student_id as 'dh23d7ashdh' which looks right?

# now we loop over your students and see if their id is in confirmed_students
bad_list = []
for student in students:
    for confirmed_student in confirmed_students:
        confirmed_student_id = confirmed_student['div_school_id'].split("-")[1]
        if student["student_id"] == confirmed_student_id:
            bad_list.append({"id": student['student_id'], "name": student['name'], "grade": student.get('student_grade', '')})
            # break from the inner loop and continue the outer loop
            # because we only need the first match
            break

答案 1 :(得分:1)

您可以使用列表理解来构建列表:

bad_list = [{k: student[v] for k, v in zip(('id', 'name', 'grade'), ('student_id', 'name', 'student_grade'))} for student in students if student['student_id'] not in confirmed_students]

旁注:我建议您使用student_id作为键将学生定义为字典(假设它是唯一的,应该是唯一的)。它将使您轻松进行所需的比较。