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

如何从Arista交换机嵌套字典提取接口名与actorPortPriority

解决Arista交换机嵌套字典的接口信息提取问题

看了你的问题和数据样本,问题出在你没搞清楚嵌套字典的层级关系——你拿到的interfaces本身是一个以接口名为键的字典,而不是直接包含actorPortPriority的字典,所以直接访问v['interfaces']['actorPortPriority']肯定会报错。

咱们一步步来拆解:

  • 你的原始数据是多个字典组成的列表(每个字典对应一组接口数据)
  • 每个字典里的interfaces键,对应的值又是一个新字典:键是接口名(比如Ethernet29/1),值是该接口的详细信息(包含actorPortPriority)

正确的遍历代码示例

首先把你的三个数据字典放进一个列表里(实际场景中,Arista的API返回应该就是这样的列表结构),然后逐层遍历:

# 把你的样本数据整理成列表
data_list = [
    {'interfaces': {'Ethernet29/1': {'actorOperKey': '0x00c8', 'actorPortId': 117, 'actorPortPriority': 32768, 'actorPortState': {'activity': True, 'aggregation': True, 'collecting': True, 'defaulted': False, 'distributing': True, 'expired': False, 'synchronization': True, 'timeout': False}, 'actorPortStatus': 'bundled', 'partnerOperKey': '0x82af', 'partnerPortId': 16643, 'partnerPortPriority': 32768, 'partnerPortState': {'activity': True, 'aggregation': True, 'collecting': True, 'defaulted': False, 'distributing': True, 'expired': False, 'synchronization': True, 'timeout': False}, 'partnerSysId': '7F9B,00-23-04-ee-be-cc'}, 'Ethernet30/1': {'actorOperKey': '0x00c8', 'actorPortId': 121, 'actorPortPriority': 32768, 'actorPortState': {'activity': True, 'aggregation': True, 'collecting': True, 'defaulted': False, 'distributing': True, 'expired': False, 'synchronization': True, 'timeout': False}, 'actorPortStatus': 'bundled', 'partnerOperKey': '0x82af', 'partnerPortId': 259, 'partnerPortPriority': 32768, 'partnerPortState': {'activity': True, 'aggregation': True, 'collecting': True, 'defaulted': False, 'distributing': True, 'expired': False, 'synchronization': True, 'timeout': False}, 'partnerSysId': '7F9B,00-23-04-ee-be-cc'}}, 'markers': {'markers': ['*']}},
    {'interfaces': {'Ethernet16/1': {'actorOperKey': '0x0385', 'actorPortId': 65, 'actorPortPriority': 32768, 'actorPortState': {'activity': True, 'aggregation': True, 'collecting': True, 'defaulted': False, 'distributing': True, 'expired': False, 'synchronization': True, 'timeout': False}, 'actorPortStatus': 'bundled', 'partnerOperKey': '0x0001', 'partnerPortId': 49, 'partnerPortPriority': 32768, 'partnerPortState': {'activity': True, 'aggregation': True, 'collecting': True, 'defaulted': False, 'distributing': True, 'expired': False, 'synchronization': True, 'timeout': False}, 'partnerSysId': '8000,28-99-3a-fa-50-fc'}}, 'markers': {'markers': ['*']}},
    {'interfaces': {'Ethernet11/1': {'actorOperKey': '0x0067', 'actorPortId': 45, 'actorPortPriority': 0, 'actorPortState': {'activity': False, 'aggregation': True, 'collecting': False, 'defaulted': True, 'distributing': False, 'expired': False, 'synchronization': False, 'timeout': False}, 'actorPortStatus': 'noAgg', 'partnerOperKey': '0x0000', 'partnerPortId': 0, 'partnerPortPriority': 0, 'partnerPortState': {'activity': False, 'aggregation': False, 'collecting': False, 'defaulted': False, 'distributing': False, 'expired': False, 'synchronization': False, 'timeout': True}, 'partnerSysId': '0000,00-00-00-00-00-00'}, 'Ethernet11/2': {'actorOperKey': '0x0067', 'actorPortId': 46, 'actorPortPriority': 32768, 'actorPortState': {'activity': False, 'aggregation': True, 'collecting': False, 'defaulted': True, 'distributing': False, 'expired': False, 'synchronization': False, 'timeout': False}, 'actorPortStatus': 'noAgg', 'partnerOperKey': '0x0000', 'partnerPortId': 0, 'partnerPortPriority': 0, 'partnerPortState': {'activity': False, 'aggregation': False, 'collecting': False, 'defaulted': False, 'distributing': False, 'expired': False, 'synchronization': False, 'timeout': True}, 'partnerSysId': '0000,00-00-00-00-00-00'}}, 'markers': {'markers': ['*']}}
]

# 遍历每个数据条目
for entry in data_list:
    # 取出当前条目的接口字典
    interface_dict = entry['interfaces']
    # 遍历每个接口的名称和详情
    for if_name, if_details in interface_dict.items():
        # 提取目标字段
        priority = if_details['actorPortPriority']
        print(f"接口: {if_name}, actorPortPriority: {priority}")

运行结果

执行后会输出:

接口: Ethernet29/1, actorPortPriority: 32768
接口: Ethernet30/1, actorPortPriority: 32768
接口: Ethernet16/1, actorPortPriority: 32768
接口: Ethernet11/1, actorPortPriority: 0
接口: Ethernet11/2, actorPortPriority: 32768

扩展:把结果保存为结构化列表

如果需要后续处理,可以把结果存成列表字典:

result = []
for entry in data_list:
    for if_name, if_details in entry['interfaces'].items():
        result.append({
            'interface_name': if_name,
            'actor_port_priority': if_details['actorPortPriority']
        })

# 打印结构化结果
for item in result:
    print(item)

这样就能清晰地提取到你需要的所有接口名和对应的actorPortPriority了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:32:38