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

Python:如何将字典中的列表值替换为含name键字典的列表?

Python字典列表值转换为字典列表

需求说明

需要将字典中值为列表类型的元素,转换为每个元素都是以'name'为键、原列表元素为值的字典,再用这个新列表替换原字典中的对应值。

原字典示例

Dic = {
    'name': 'P1', 
    'srcintf': 'IntA', 
    'dstintf': 'IntB', 
    'srcaddr': 'IP1', 
    'dstaddr': ['IP2', 'IP3', 'IP4'], 
    'service': ['P_9100', 'SNMP'],
    'schedule' : 'always',
}

预期输出

Dic = {
    'name': 'P1', 
    'srcintf': 'IntA', 
    'dstintf': 'IntB', 
    'srcaddr': 'IP1', 
    'dstaddr': [
              {'name': 'IP2'}, 
              {'name': 'IP3'}, 
              {'name': 'IP4'}
              ],
    'service': [
              {'name': 'P_9100'},
              {'name': 'SNMP'}
              ],
    'schedule' : 'always',
}

原代码问题分析

你尝试的代码存在几个关键问题:

  • liste变量未初始化,且每次处理列表值时没有重置,会导致不同键的结果被累积到同一个列表里
  • NewDic被赋值为列表[k,v],而非构建目标字典结构
  • 仅打印了非列表值的键值对列表,没有正确生成完整的目标字典

原代码:

for k,v in Dic.items():
     if not isinstance(v, list):
          NewDic = [k,v]
          print(NewDic)
     else:
          values = v
          keys = ["name"]*len(values)
          for item in range(len(values)):
               key = keys[item]
               value = values[item]
               SmallDic = {key : value}
               liste.append(SmallDic)
               NewDic = [k,liste]

正确解法

方法1:直接修改原字典

遍历字典的键值对,判断值是否为列表,若是则生成新的字典列表替换原值:

Dic = {
    'name': 'P1', 
    'srcintf': 'IntA', 
    'dstintf': 'IntB', 
    'srcaddr': 'IP1', 
    'dstaddr': ['IP2', 'IP3', 'IP4'], 
    'service': ['P_9100', 'SNMP'],
    'schedule' : 'always',
}

for key, value in Dic.items():
    if isinstance(value, list):
        # 用列表推导式生成新的字典列表
        Dic[key] = [{'name': item} for item in value]

print(Dic)

方法2:创建新字典(不修改原字典)

如果不想改动原字典,可以创建一个新字典来存储结果:

original_dic = {
    'name': 'P1', 
    'srcintf': 'IntA', 
    'dstintf': 'IntB', 
    'srcaddr': 'IP1', 
    'dstaddr': ['IP2', 'IP3', 'IP4'], 
    'service': ['P_9100', 'SNMP'],
    'schedule' : 'always',
}

new_dic = {}
for key, value in original_dic.items():
    if isinstance(value, list):
        new_dic[key] = [{'name': item} for item in value]
    else:
        new_dic[key] = value

print(new_dic)

这两种方法都能得到你想要的预期输出,其中列表推导式是Python中处理这类转换最简洁高效的方式。

内容的提问来源于stack exchange,提问作者Sthefania Moreno Reina

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 16:25:14