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

如何创建键值数量不同的定制字典?每两个键对应一个值

问题:将列表中每两个元素映射到另一个列表的对应元素创建字典

我有两个列表:

k = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
v = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']

希望创建如下形式的字典:

d = {0:'1', 1:'1', 2:'2', 3:'2', 4:'3', 5:'3', ...}

即列表k中每两个连续元素依次映射到列表v中的同一个元素,请问该如何实现?


方法1:字典推导式(简洁高效)

通过遍历v的索引和值,为每个v元素匹配k中对应的两个键,一行代码完成:

k = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
v = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']

d = {key: val for idx, val in enumerate(v) for key in k[2*idx : 2*(idx+1)]}

逻辑说明:enumerate(v)获取v中每个元素的索引和值,k[2*idx : 2*(idx+1)]截取k中对应位置的两个元素,最终将这两个元素都映射到当前v的值。

方法2:显式循环构建(可读性强)

如果偏好更直白的逻辑,可以用循环逐个添加键值对:

d = {}
for idx in range(len(v)):
    # 取出k中对应的两个键
    key_a = k[2*idx]
    key_b = k[2*idx + 1]
    d[key_a] = v[idx]
    d[key_b] = v[idx]

这种方式步骤清晰,适合理解基础逻辑。

方法3:迭代器分组(进阶场景)

如果k是动态生成的序列(比如用range生成),可以用迭代器分组的方式配对k和v:

Python 3.12+版本

import itertools

k = range(20)  # 等价于原列表
v = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']

d = {}
for keys, val in zip(itertools.batched(k, 2), v):
    for key in keys:
        d[key] = val

低版本Python兼容写法

k = range(20)
v = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']

d = {}
for keys, val in zip(zip(*[iter(k)]*2), v):
    for key in keys:
        d[key] = val

这里zip(*[iter(k)]*2)的作用是将k按每两个元素一组拆分,和v一一配对后再构建字典。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 03:57:27