如何在Python中获取嵌套defaultdict中的前3个最大值?
解决嵌套defaultdict的排序问题
要实现你需要的排序输出,核心是先提取所有层级的键值对,再按指定规则排序,最后格式化输出。以下是具体步骤和代码:
步骤说明
- 提取所有键值对:遍历外层
defaultdict的每个键,再遍历内层defaultdict的键和对应值,把这些信息整理成统一的可排序结构。 - 自定义排序规则:按值降序排列(值大的在前),如果值相同,可按需按外层键、内层键排序(可选)。
- 过滤与格式化输出:根据需求过滤掉不需要的条目(比如值小于2的),然后按指定格式打印。
完整代码
from collections import defaultdict # 构造你的嵌套defaultdict(修正原代码的语法错误) nested_dict = defaultdict(lambda: defaultdict(int), { 'A': defaultdict(int, {'a':2, 'b':1, 'd':2, 'f':1}), 'B': defaultdict(int, {'a':3, 'c':4, 'e':1}) }) # 提取所有层级的键值对 all_entries = [] for outer_key, inner_dict in nested_dict.items(): for inner_key, value in inner_dict.items(): all_entries.append( (value, outer_key, inner_key) ) # 按值降序排序,值相同时按外层键、内层键升序排序 sorted_entries = sorted(all_entries, key=lambda x: (-x[0], x[1], x[2])) # 过滤并输出符合要求的结果(这里保留值≥2的条目) for value, outer_key, inner_key in sorted_entries: if value >= 2: print(f"{outer_key},{inner_key} : {value}")
输出结果
B,c : 4 B,a : 3 A,a : 2 A,d : 2
如果只需要输出前3条(和你给出的示例输出完全一致),把最后一步改成:
for value, outer_key, inner_key in sorted_entries[:3]: print(f"{outer_key},{inner_key} : {value}")
内容的提问来源于stack exchange,提问作者Mina
相关产品推荐
相关产品推荐

