递归遍历嵌套字典
有一个半排序数据,该数据由最近一次测验中学生分数的字典组成。在字典中,键始终是 a0000000 形式的学生编号,而值要么是:代表该学生分数(0...100)的整数,或者包含更多键值对的嵌套字典。例如:{'a1000000': {'a1000002': 76, 'a1000351': 50, 'a1003202': 59},
'a2000000': {'a2002202': 56,
'a2002535': 57,
'a2005452': 79,
'a2200000': {'a2200354': 65,
'a2201029': 80,
'a2212332': 12,
'a2240000': {'a2249834': 87}}}}
[('a1000002', 76),
('a1000351', 50),
('a1003202', 59),
('a2002202', 56),
('a2002535', 57),
('a2005452', 79),
('a2200354', 65),
('a2201029', 80),
('a2212332', 12),
('a2249834', 87)]写出一个定义为:
def flatten_nested_scores (student_id_score_dict): 可以使用递归来遍历嵌套字典。首先,我们定义一个空列表来存储结果。然后,我们遍历字典的键值对。如果值是一个整数,我们将其添加到结果列表中。如果值是一个字典,我们将递归调用自己来遍历该字典,并将返回的结果添加到结果列表中。最后,我们将结果列表按照学生 ID 进行排序,并返回结果。
以下是实现这个功能的代码:
def traverse_nested_dict(data):
result = []
for key, value in data.items():
if isinstance(value, int):
result.append((key, value))
elif isinstance(value, dict):
result.extend(traverse_nested_dict(value))
result.sort(key=lambda x: x)
return result
data = {
'a1000000': {
'a1000002': 76,
'a1000351': 50,
'a1003202': 59
},
'a2000000': {
'a2002202': 56,
'a2002535': 57,
'a2005452': 79,
'a2200000': {
'a2200354': 65,
'a2201029': 80,
'a2212332': 12,
'a2240000': {
'a2249834': 87
}
}
}
}
result = traverse_nested_dict(data)
print(result)
输出结果为:
[('a1000002', 76), ('a1000351', 50), ('a1003202', 59), ('a2002202', 56), ('a2002535', 57), ('a2005452', 79), ('a2200354', 65), ('a2201029', 80), ('a2212332', 12), ('a2249834', 87)]
这个结果是按照学生 ID 排序的元组列表,每个元组包含学生 ID 和分数。
页:
[1]