You need to enable JavaScript to run this app. Python如何拼接两个字典生成新对象(Cisco DNA Center场景)
优惠活动
大模型
产品
解决方案
定价
更多

Python如何拼接两个字典生成新对象(Cisco DNA Center场景)

Python 拼接两个重复键字典且保留原字典类型的解决方案

问题根因

你用{**payload_1, **payload_2}合并失败是Python字典的固有特性:字典的键必须唯一,当两个字典有重复键时,后传入的字典的值会覆盖前一个的对应值,你的两个payload所有顶层键完全相同,自然只会保留payload_2的内容。

解决方案

场景1:Cisco DNA Center接口接受数组类型的payload

这是最贴合你期望输出的方案,直接将两个字典存入列表即可,原字典不会被修改,类型也保持不变:

payload = [payload_1, payload_2]

类型校验结果:

>>> type(payload)
<class 'list'>
>>> type(payload[0])
<class 'dict'>
>>> type(payload[1])
<class 'dict'>

输出内容和你期望的完全一致:

>>> print(payload)
[
    {'groupName': 'POOL_UNDERLAY-LAN-AUTOMATION', 'groupOwner': 'DNAC', 'type': 'generic', 'siteId': 'ffd0d540-6fee-41d1-ba42-430001cf042f', 'ipPools': [{'parentUuid': '0b20b02e-341a-4584-9f79-27ed32682efc', 'dhcpServerIps': ['1.1.1.1', '2.2.2.2'], 'dnsServerIps': ['8.8.8.8'], 'ipPoolOwner': 'DNAC', 'shared': 'true', 'gateways': ['192.168.0.1'], 'ipPoolCidr': '192.168.0/24'}]},
    {'groupName': 'POOL_AP', 'groupOwner': 'DNAC', 'type': 'generic', 'siteId': 'ffd0d540-6fee-41d1-ba42-430001cf042f', 'ipPools': [{'parentUuid': '0b20b02e-341a-4584-9f79-27ed32682efc', 'dhcpServerIps': ['1.1.1.1', '2.2.2.2'], 'dnsServerIps': ['8.8.8.8'], 'ipPoolOwner': 'DNAC', 'shared': 'true', 'gateways': ['192.168.1.1'], 'ipPoolCidr': '192.168.1/24'}]}
]

场景2:接口要求payload必须为字典类型

你可以给两个子字典分配独立的外层键,避免键冲突:

payload = {
    "underlay_lan_pool": payload_1,
    "ap_pool": payload_2
}

类型校验结果:

>>> type(payload)
<class 'dict'>
>>> type(payload["underlay_lan_pool"])
<class 'dict'>
>>> type(payload["ap_pool"])
<class 'dict'>

两种方案都不会修改原有的payload_1和payload_2,完全符合你的要求。

补充说明

如果你实际需求是将两个IP池合并到同一个地址池组下,不需要拆分两个独立字典,可以直接合并ipPools数组:

payload = payload_1.copy()
payload["ipPools"].extend(payload_2["ipPools"])

这样得到的payload是单个字典,包含两个IP池的配置,也符合部分DNAC接口的提交要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 18:27:00