在Python 3中解析嵌套字典?

时间:2019-07-27 18:59:27

标签: python-3.x list dictionary parsing nested

我有一本字典(名为dict1),其结构如下:

dict1 = 

{'Classroom': 

    [{'Subject': "Calculus", 'Students': 

        [
         {'Name': "Joe", 'Age': 12, 'Weight': 126, 'Gender': "Male"}, 
         {'Name': "Doug", 'Age': 13, 'Weight': 95, 'Gender': "Male"},
         {'Name': ..., 'Age': ..., 'Weight': ..., 'Gender': ...}
         ...
        ]

    }]

}

此词典中的列表(包含姓名,年龄,体重和性别)非常长,我想解析姓名年龄和< strong>性别,然后将其附加到另一个列表中,如下所示:

mylist = [("Joe", 12, "Male"), ("Doug", 13, "Male"), ... ]

我尝试了在线搜索,并修改了如下代码:

mylist = []
dict2 = dict1['Classroom'][0]['Students'][0]['Name']
mylist.append(dict2)

但是发生的是它仅附加了名字(Joe)。此外,我要注意如何同时解析三个项目(名称,年龄和性别)。有没有人不必使用库就能做到这一点?我知道这可能是一个简单的问题,但是我是Python的新手,感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

您的dict1包含一个密钥'Classroom',其值为具有一个条目的list。 该条目也是一个dict,其中包含两个键。您需要'Students'键,因为它包含所有学生的列表。这是一个清单。遍历该列表并将字段分组为元组。

从技术上讲,它是嵌套在字典['Students']中的列表['Classroom'][0]中的字典['Classroom']中的列表dict

代码将是

mylist = []
studentlist = dict1['Classroom'][0]['Students']
for s in studentlist:
    m = (s['Name'], s['Age'], s['Gender'])
    mylist.append(m)

对于测试用例

classroom = {'Classroom': 
    [{'Subject': "Calculus", 'Students': 
        [
        {'Name': "Joe", 'Age': 12, 'Weight': 126, 'Gender': "Male"}, 
        {'Name': "Doug", 'Age': 13, 'Weight': 95, 'Gender': "Male"},
        {'Name': "Omg", 'Age': 50, 'Weight': 99, 'Gender': "Female"}
        ]
    }]
}

您最终会得到

[('Joe', 12, 'Male'), ('Doug', 13, 'Male'), ('Omg', 50, 'Female')]

答案 1 :(得分:1)

student_list = []
classroom_list =  dict1['Classroom']
# this is the first iteration list
for classroom in classroom_list:
    student_list = classroom['Students']
    # this is the second iteration list
    for student in student_list:
        student_list.append(student['Name'], student['Age'], student['Gender'])

#student_list = [("Joe", 12, "Male"), ("Doug", 13, "Male"), ... ]