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

Python中如何嵌套列表与字典推导式实现字典列表端口名替换

问题描述

我现有一个由字典组成的列表,需要修改列表内字典的对应值,目前编写的for loop可正常实现预期功能,代码如下:

show_mac = [{'mac': '0000.0000.0000', 'port': 'GigabitEthernet1/1', 'type': 'dynamic', 'vlan': '1'},
            {'mac': '0000.0000.0000', 'port': 'TenGigabitEthernet2/1', 'type': 'dynamic', 'vlan': '1'},
            {'mac': '0000.0000.0000', 'port': 'Port-channel1', 'type': 'dynamic', 'vlan': '1'}]

for d in show_mac:
    for k, v in d.items():
        d[k] = (
            v.replace('TenGigabitEthernet', 'Te')
            .replace('GigabitEthernet', 'Gi')
            .replace('Port-channel', 'Po')
        )

pprint(show_mac)

上述代码运行后输出结果如下:

[{'mac': '0000.0000.0000', 'port': 'Gi1/1', 'type': 'dynamic', 'vlan': '1'},
 {'mac': '0000.0000.0000', 'port': 'Te2/1', 'type': 'dynamic', 'vlan': '1'},
 {'mac': '0000.0000.0000', 'port': 'Po1', 'type': 'dynamic', 'vlan': '1'}]

我目前正在学习Python推导式的编写方法,想要了解如何使用列表推导式嵌套字典推导式的写法改写上述for loop,得到完全一致的处理结果?

实现方法

直接嵌套两层推导式即可:外层用列表推导式遍历原列表的每个字典,内层用字典推导式遍历单个字典的所有键值对,对值执行和原逻辑完全一致的替换规则,代码如下:

show_mac = [
    {
        k: v.replace('TenGigabitEthernet', 'Te')
            .replace('GigabitEthernet', 'Gi')
            .replace('Port-channel', 'Po')
        for k, v in d.items()
    }
    for d in show_mac
]

pprint(show_mac)

运行后输出和原逻辑的结果完全匹配。

补充说明

  • 两种写法的核心差异:原循环是原地修改原列表里的已有字典对象,不会生成新容器;推导式写法会生成全新的字典、组成全新的列表,再赋值给show_mac变量,如果你没有其他地方引用原列表/原字典的需求,这个差异不会造成任何影响。
  • 所有字段都会统一走替换逻辑,mac、type、vlan这类本身不包含待替换字符串的字段,执行replace不会改动原值,处理效果和原逻辑完全一致。
  • 如果你必须保留原地修改原对象的逻辑,不建议硬套推导式。推导式的定位是生成新容器,强行用推导式写原地修改的逻辑,会产生无意义的临时对象,代码可读性也会变差,不如原循环清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:09:20