如何按字母顺序(字典序)对嵌套字典的键进行排序?
如何按字母顺序对嵌套字典的键进行排序?
你已经搞定了外层字典的键排序,但内层嵌套的字典还没按字母序排列对吧?别担心,只需要在处理外层排序的同时,对每个子字典也执行排序操作,就能实现内外层键都按字典序排列的效果。
修改后的完整代码
from collections import * with open('Input_1.txt', 'r') as file: dict_2 = {} for line in file: surname, item, amount = line.split() amount = int(amount) if surname not in dict_2: dict_2[surname] = {} if item not in dict_2[surname]: dict_2[surname][item] = amount else: dict_2[surname][item] += amount # 同时完成外层和内层字典的键排序 sorted_dict = { outer_key: {inner_key: inner_val for inner_key, inner_val in sorted(inner_dict.items())} for outer_key, inner_dict in sorted(dict_2.items()) } print(sorted_dict)
代码逻辑说明
- 外层通过
sorted(dict_2.items()):按姓氏的字母顺序遍历外层字典的键值对,生成新的外层有序字典。 - 内层通过
sorted(inner_dict.items()):对每个用户对应的物品字典,按物品名称的字母顺序排序键值对,再生成新的内层有序字典。
旧版本Python兼容提示
如果你使用的是Python 3.6及更早版本(普通字典不保留插入顺序),可以改用OrderedDict来确保排序后的顺序被稳定保留:
from collections import OrderedDict sorted_dict = OrderedDict( (outer_key, OrderedDict(sorted(inner_dict.items()))) for outer_key, inner_dict in sorted(dict_2.items()) )
运行这段代码后,你就能得到和期望完全一致的、内外层键都按字母序排列的字典输出了。
内容的提问来源于stack exchange,提问作者Arsirgent
相关产品推荐
相关产品推荐

