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

如何用列表元素替换字典键并生成多个目标字典?

问题与解决方法

问题描述

给定列表:

my_list = ['aa', 'bb', 'cc']

和字典:

my_dict = {'source':{'new_key': {'k1': 1, 'k2': 2, 'k3': 3}}}

需要用列表中的每个元素替换字典里的new_key,生成三个独立的字典:

{'source':{'aa': {'k1': 1, 'k2': 2, 'k3': 3}}}

{'source':{'bb': {'k1': 1, 'k2': 2, 'k3': 3}}}

{'source':{'cc': {'k1': 1, 'k2': 2, 'k3': 3}}}

尝试的代码未成功:

for i in my_list:
    my_dict ['source'][f'{i}'] = my_dict ['sources']['new_key']
    del my_dict ['source']['new_key']

错误分析

  1. 拼写错误:代码里my_dict ['sources']多了个s,正确应为my_dict['source']
  2. 原字典被破坏:第一次循环就删除了new_key,后续循环找不到该键会直接报错
  3. 未生成独立字典:所有循环都修改同一个my_dict,最后只会得到一个以列表最后一个元素为键的字典,无法得到三个独立字典

正确实现

方法一:循环创建新字典

先取出需要复用的子字典,每次循环生成全新的字典结构:

my_list = ['aa', 'bb', 'cc']
my_dict = {'source':{'new_key': {'k1': 1, 'k2': 2, 'k3': 3}}}

# 提取要复用的子字典,避免重复查找
sub_content = my_dict['source']['new_key']
result_dicts = []

for key in my_list:
    # 每次创建新字典,替换目标键
    new_dict = {'source': {key: sub_content.copy()}}
    result_dicts.append(new_dict)

# 输出结果
for d in result_dicts:
    print(d)

方法二:列表推导式简化写法

用列表推导式可以更简洁地生成结果列表:

my_list = ['aa', 'bb', 'cc']
my_dict = {'source':{'new_key': {'k1': 1, 'k2': 2, 'k3': 3}}}

sub_content = my_dict['source']['new_key']
result_dicts = [{'source': {k: sub_content.copy()}} for k in my_list]

# 逐个打印结果
for item in result_dicts:
    print(item)

说明:如果后续不需要修改子字典里的内容,可以去掉.copy(),直接引用sub_content即可;如果需要单独修改每个新字典的子字典,必须用.copy()做浅拷贝,否则所有新字典的子字典会指向同一个对象,修改一个会影响其他。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 22:15:36