如何打印嵌套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
相关产品推荐
相关产品推荐

