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

字典转换需求:将多元素列表值逐一分配给对应键

解决方案:字典多元素列表的一键一值分配

嘿,这个问题核心其实就是把共享相同值列表的键组,和列表元素做一一映射,我给你写个高效的实现,完美兼容单元素和多元素的情况:

思路拆解

  1. 分组:先把所有键按照它们对应的列表(转成元组,因为列表不能当字典键)分组,这样拥有相同列表的键会被归为一组;
  2. 分配:对每个组,把组内的键和列表里的元素一一配对,每个键分配唯一的元素(顺序不限,完全满足你的需求)。

完整代码实现

from collections import defaultdict

def transform_dict(D):
    # 1. 按值列表分组(将列表转为元组作为分组键)
    groups = defaultdict(list)
    for key, value in D.items():
        groups[tuple(value)].append(key)
    
    # 2. 给每个组的键分配对应的元素
    for values, keys in groups.items():
        # 题目保证键数和元素数一致,这里加个断言做校验(可选)
        assert len(keys) == len(values), "键的数量与元素数量不匹配,不符合题目要求"
        # 一一配对分配,顺序不限
        for key, val in zip(keys, values):
            D[key] = val
    return D

测试示例

用你给出的输入测试:

# 输入字典
D = {
    0: [7],
    1: [5],
    2: [4],
    3: [1, 2, 3],
    4: [6, 8],
    5: [1, 2, 3],
    6: [1, 2, 3],
    7: [6, 8]
}

# 转换后
result = transform_dict(D)
print(result)

输出(字典顺序可能因Python版本略有不同,但分配逻辑正确):

{0: 7, 1: 5, 2: 4, 3: 1, 4: 6, 5: 2, 6: 3, 7: 8}

为什么这个方案高效?

  • 时间复杂度是O(M),M是字典中键的总数,只需要两次遍历字典;
  • 自动兼容单元素列表的情况(单元素列表的组只有一个键,直接分配唯一元素);
  • 逻辑清晰,分组后配对的方式完全符合题目中"相同数量的不同键对应相同列表"的前提。

如果需要指定分配顺序(比如按键的大小排序分配元素),只需要把zip(keys, values)改成zip(sorted(keys), sorted(values))即可,非常灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:45:45