鱼C论坛

 找回密码
 立即注册
查看: 1489|回复: 1

递归遍历嵌套字典

[复制链接]
发表于 2023-9-4 13:24:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
有一个半排序数据,该数据由最近一次测验中学生分数的字典组成。在字典中,键始终是 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):

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-9-4 13:25:06 | 显示全部楼层
可以使用递归来遍历嵌套字典。首先,我们定义一个空列表来存储结果。然后,我们遍历字典的键值对。如果值是一个整数,我们将其添加到结果列表中。如果值是一个字典,我们将递归调用自己来遍历该字典,并将返回的结果添加到结果列表中。最后,我们将结果列表按照学生 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[0])
    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 和分数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 14:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表