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

Python遍历含等长列表值的字典 按索引拆分生成多个新字典

字典按列表索引逐一生成新字典实现方案

核心逻辑

你的需求本质是把原字典里存储的等长列表做「按行拆分」,每行搭配固定不变的单值字段生成独立字典,且支持生成一个处理一个,不需要预先生成全部结果占用内存。

  • 首先拆分原字典字段为两类:固定单值字段、列表值字段,同时校验所有列表长度一致,避免索引错位
  • 以列表公共长度为循环次数,每次循环取所有列表对应索引位置的值,和固定字段组合成新字典
  • 每生成一个新字典立刻执行自定义处理逻辑,处理完成再进入下一轮循环

完整代码

# 注意:不要用dict作为变量名,会覆盖Python内置的dict类型,这里改名为source_data
source_data = {
    'cost': [1, 3, 4, 8, 10],
    'address': '123 Fake St',
    'phone number': '123-456-7890',
    'item': ['apple', 'banana', 'strawberry', 'paper', 'pencil'],
    'name': 'John David'
}

# 拆分固定字段、列表字段,校验列表长度
fixed_map = {}
list_map = {}
common_len = None
for key, val in source_data.items():
    # Python2环境请把上面的items()换成iteritems()
    if isinstance(val, list):
        if common_len is None:
            common_len = len(val)
        else:
            if len(val) != common_len:
                raise ValueError(f"列表字段{key}长度不匹配,所有列表值长度必须一致")
        list_map[key] = val
    else:
        fixed_map[key] = val

# 逐索引生成字典,边生成边处理
for i in range(common_len):
    # 复制固定字段作为新字典基础
    current = fixed_map.copy()
    # 填充当前索引的列表值
    for list_key, content_list in list_map.items():
        current[list_key] = content_list[i]
    
    # --- 以下位置写你的自定义处理逻辑即可 ---
    # 示例:打印当前生成的字典,和你给出的预期输出完全一致
    print(f"索引{i}对应字典:", current)
    # 自定义逻辑结束后自动进入下一轮循环

运行上述代码,前两个输出的字典和你给出的dict1、dict2完全匹配。

原有代码的问题

你之前写的defaultdict逻辑是把相同值对应的key归为一组,和按索引拆分字典的需求完全无关,既没有区分单值和列表值,也没有做列表元素的索引对齐,自然达不到预期效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:54:24