You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何打印嵌套defaultdict不显示类信息,同时获得指定排序的输出

问题解答

你不需要第三次调用sorted函数来实现需求,你当前的输出不符合预期的核心原因是没有将内层的defaultdict转换为普通的排序后列表结构,也没有对技能名、人名字段做字母序排序。

原有代码问题点

  • 你编写的dict(order_skills)没有赋值给变量,属于无效代码,不会改变原有的defaultdict结构
  • 现有两层sorted仅处理了外层分数的降序排序,没有覆盖内层技能、人名的排序需求,也没有消除defaultdict的类型标识

你不需要额外增加第三次全局排序调用,只需要在构建结果的过程中补充对内层字段的排序逻辑即可,修改后的完整代码如下:

from collections import defaultdict
db1 = {'Adam': {'Cleaning': 4, 'Tutoring': 2, 'Baking': 1},
        'Betty': {'Gardening': 2, 'Tutoring': 1, 'Cleaning': 3},
        'Charles': {'Plumbing': 2, 'Cleaning': 5},
        'Diane': {'Laundry': 2, 'Cleaning': 4, 'Gardening': 3}}

def by_skill(db1 : {str:{str:int}}) -> [int,[str,[str]]]:
    order_skills = defaultdict(lambda:defaultdict(list))
    for k,v in db1.items():
        for key,value in v.items():
            order_skills[value][key].append(k)

    order_skills_sorted = []
    # 外层按分数降序排序
    for score, skill_dict in sorted(order_skills.items(), reverse=True):
        # 内层先对人名按字母序排序,再按技能名字母序升序排列,转换为元组列表
        sorted_skill_list = sorted(
            (skill, sorted(names)) for skill, names in skill_dict.items()
        )
        order_skills_sorted.append((score, sorted_skill_list))
    return order_skills_sorted


if __name__ == '__main__':
    print(by_skill(db1))

运行上述代码即可得到你需要的输出格式,所有技能、人名都按字母序排序,没有defaultdict的类型信息。

内容的提问来源于stack exchange,提问作者newbiecoder11

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 14:06:03