如何访问嵌套在字典列表中的字典的值

时间:2021-05-27 15:44:04

标签: python

我有一个这样的 json 响应。

{
  "students": [
{
  "student_reference_id": "1234",
  "name": "Rajesh Pawar",
  "birth_year": "1995",
  "gender": "Male",
  "marks": [
    {
      "science": 1234,
      "physics": "2345",
    }
  ]
}
{
  "student_reference_id": "5678",
  "name": "nikita Pawar",
  "birth_year": "1996",
  "gender": "female",
  "marks": [
        ]
      }
    ]
}

我想要一个像 dict 一样的列表

  "student_reference_id": "5678",
  "name": "nikita Pawar",
  "birth_year": "1996",
  "gender": "female",
  "science": 1234,
  "physics": "2345",

我可以这样做

response = response.json()
new_list = []
response = response['students']
for student in response
   for mark in student 
       temp = {
         "student_reference_id": student['student_reference_id'],
          "name": student['name'],
          "birth_year": student['birth_year'],
          "gender": student['gender'],
          "science" : mark['science'],
          "physics" : mark['physics']
    }
    new_list.append(temp)

问题是,当标记 dict 响应为空(假设学生没有参加考试),上述解决方案会跳过学生并且学生数据不会出现在新列表中。 >

实现它的更好方法是什么?

1 个答案:

答案 0 :(得分:0)

您在遍历 temp 时创建了 mark in student 对象,这就是为什么在没有任何标记时不会创建对象的原因。试试这个

for student in response:
    temp = {
        "student_reference_id": student['student_reference_id'],
        "name": student['name'],
        "birth_year": student['birth_year'],
        "gender": student['gender']
    }
    if(len(student["marks"]) > 0):
        for mark in student["marks"][0]:
            temp[mark] = student["marks"][0][mark]

    new_list.append(temp)