Python:非结构化嵌套字典高效提取最高得分字母的自动化方法问询
自动化提取非结构化嵌套字典的最高得分字母
你手动逐个指定路径提取的方式确实太繁琐了,要是后续字典结构变动或者新增项,维护起来简直头疼!其实我们可以用递归遍历的方式来自动处理这种不确定深度的嵌套字典,不管结构怎么变,都能精准找到所有分数项并提取最高得分的字母,同时生成对应的路径键。
具体实现代码
我们可以写一个递归函数来遍历字典的每一层,自动识别需要处理的分数节点:
def find_top_scores(nested_dict, current_path="", result=None): # 初始化结果字典,包含你需要的默认键值对 if result is None: result = {'key': 'value'} for key, value in nested_dict.items(): # 拼接当前层级的路径,用/分隔 new_path = f"{current_path}/{key}" if current_path else key if isinstance(value, dict): # 判断当前字典是否是最终的字母-分数集合(所有值都是数字) if all(isinstance(val, (int, float)) for val in value.values()): # 直接获取值最大的字母键,比排序更高效 top_letter = max(value, key=value.get) result[new_path] = top_letter else: # 不是最终节点,继续递归深入下一层 find_top_scores(value, new_path, result) return result # 你的原始嵌套字典数据 data = { 'A_brand': {'score1': {'A': 13, 'K': 50}}, 'B_brand': {'before_taste': {'score2': {'A': 43, 'D': 23}}, 'after_taste': {'score3': {'H': 36, 'J': 34}}}, 'Score4': {'G': 2, 'W': 19} } # 调用函数得到目标结果 final_result = find_top_scores(data) print(final_result)
代码逻辑说明
- 递归函数会自动遍历字典的每一层,不断拼接路径字符串(比如
A_brand/score1) - 当检测到某个字典的所有值都是数字时,就判定这是我们要处理的分数项,用
max()方法直接拿到得分最高的字母(这个操作比排序更高效,不需要对所有元素排序,时间复杂度更低) - 如果当前节点不是最终分数项,就继续递归深入下一层
- 结果字典初始化时直接包含了你需要的
{'key':'value'}默认项
运行这段代码后,输出结果完全符合你的预期:
{'key': 'value', 'A_brand/score1': 'K', 'B_brand/before_taste/score2': 'A', 'B_brand/after_taste/score3': 'H', 'Score4': 'W'}
额外优化提示
- 这个方法完全不需要提前知道字典的嵌套结构,后续新增品牌或者调整层级都能自动适配
- 如果你的数据里可能存在非数字的分数值,可以在判断节点时增加过滤逻辑,避免报错
- 要是需要处理更复杂的结构(比如列表混合字典),可以在函数里加对列表的遍历逻辑,扩展性很强
内容的提问来源于stack exchange,提问作者Eric.P
相关产品推荐
相关产品推荐

