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

求助:如何将普通字典转换为三重有序反转字典?

实现三重有序反转字典的解决方案

我明白你想要把普通字典转换成这种「三重有序反转字典」的需求——核心是先按值的出现频率分组,再把同一频率的键值映射归到一起,最后给每个频率组分配有序的外层键。咱们一步步来实现这个通用功能:

步骤拆解

  1. 收集值对应的所有键:先遍历原字典,把每个值对应的所有键都收集到列表里,同时也就得到了每个值的出现次数(就是列表的长度)。
  2. 按出现频率分组:把拥有相同出现次数的值-键列表,归到同一个内层字典中。
  3. 分配有序外层键:给每个频率组分配从1开始的有序序号作为外层键,得到最终的三重字典。

完整代码实现

from collections import defaultdict

def convert_to_triple_reversed_dict(original_dict):
    # 第一步:收集每个值对应的所有键
    value_to_keys = defaultdict(list)
    for key, value in original_dict.items():
        value_to_keys[value].append(key)
    
    # 第二步:按值的出现次数(即键列表的长度)分组
    frequency_groups = defaultdict(dict)
    for val, keys_list in value_to_keys.items():
        occurrence_count = len(keys_list)
        frequency_groups[occurrence_count][val] = keys_list
    
    # 第三步:将频率组转换为有序的外层键(从1开始递增)
    # 先按出现次数从小到大排序,再分配序号
    sorted_frequency_groups = sorted(frequency_groups.items(), key=lambda x: x[0])
    result_dict = {index + 1: group for index, (count, group) in enumerate(sorted_frequency_groups)}
    
    return result_dict

# 测试你的示例字典
test_dict = {1: 1, 3: 3, 5: 6, 6: 6}
print(convert_to_triple_reversed_dict(test_dict))
# 输出:{1: {1: [1], 3: [3]}, 2: {6: [5, 6]}}

代码说明

  • 第一步用defaultdict(list)可以自动帮我们初始化空列表,避免手动判断值是否存在,遍历原字典时直接把键追加到对应值的列表中,得到{1: [1], 3: [3], 6: [5, 6]}。
  • 第二步遍历第一步的结果,用每个键列表的长度(也就是值的出现次数)作为分组键,把值和对应的键列表放到该分组的字典里,此时得到的frequency_groups是{1: {1: [1], 3: [3]}, 2: {6: [5, 6]}},已经接近目标,只是外层键是出现次数本身。
  • 第三步通过排序确保分组按出现次数从小到大排列,再用enumerate给每个组分配从1开始的有序序号,替换掉原来的次数键,就得到了你想要的预期输出。

这个函数是通用的,不管你替换成什么字典,只要是键值对结构,都能生成对应的三重有序反转字典。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:33:35