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

如何自动生成指定范围、带前缀键值的嵌套Python字典

生成带嵌套子字典的Python字典问题解决

问题描述

需要自动生成包含嵌套子字典的Python字典,示例格式如下:

{'C1': {'inlet': 'J1'}, 'C2': {'inlet': 'J2'}, 'C3': {'inlet': 'J3'}}

要求通过定义数值范围,自动为顶层键添加C前缀,为子字典的inlet值添加J前缀。目前已实现C前缀键的生成,但无法正确填充对应的J前缀值,附上尝试代码及问题说明:

原尝试代码

#Define list of C1, C2, C3, ....... where it creates values up to a value defined by a range
def c_values(list1, str1):
 
    str1 += '{0}'
    list1 = [str1.format(i) for i in list1]
    return(list1)

str1 = 'C'
list1 = range(1,4,1)
result1 = c_values(list1,str1)
print(result1)


#Define list of J1, J2, J3, ....... where it creates values up to a value defined by a range
def j_values(list2, str2):
 
    str2 += '{0}'
    list2 = [str2.format(i) for i in list2]
    return(list2)

str2 = 'J'
list2 = range(1,4,1)
result2 = j_values(list2,str2)
print(result2)

#Combine result1 and result2 into a dictionary
result3 = dict(zip(result1,result2))
print(result3)

#Build final dictionary
output = {}
inputdata = 'J'
for key,value in result3.items():
    for i in result3:
        output[i] = {'inlet':inputdata}
print(output)

错误原因

最后一段构建最终字典的代码存在两个核心问题:

  1. 嵌套循环for i in result3完全多余,每次外层循环都会遍历所有键,重复赋值覆盖之前的结果
  2. 没有使用result3中存储的value(即J1、J2、J3),而是固定用inputdata = 'J'作为inlet的值,导致所有子字典的inlet值都是'J'而非对应序号的Jx

修正方案

方案1:基于原代码修改

只需要修改最后构建字典的部分,去掉多余的嵌套循环,直接使用result3中的key和value:

#Build final dictionary
output = {}
for key, value in result3.items():
    output[key] = {'inlet': value}
print(output)

运行后即可得到预期输出:

{'C1': {'inlet': 'J1'}, 'C2': {'inlet': 'J2'}, 'C3': {'inlet': 'J3'}}

方案2:简化实现(推荐)

无需拆分多个函数和步骤,直接使用字典推导式一步生成目标字典,代码更简洁高效:

# 定义数值范围(左闭右开,这里1到4对应生成1、2、3)
start = 1
end = 4

# 一步生成目标字典
output = {f'C{i}': {'inlet': f'J{i}'} for i in range(start, end)}
print(output)

此方法直接通过循环数值范围,同时生成带C前缀的键和带J前缀的inlet值,避免了中间变量的冗余。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 13:56:41