簡體   English   中英

比較來自多個字典的值

[英]Compare values from multiple dictionaries

我有兩個字典列表和一個元組:

vrfs = [
 {'default_rd': '<not set>',
  'interfaces': ['Gi0/0'],
  'name': 'Mgmt-vrf',
  'protocols': 'ipv4,ipv6'},
 {'default_rd': '12345:510',
  'interfaces': ['503', '510', '515'],
  'name': 'VLAN1',
  'protocols': 'ipv4,ipv6'},
 {'default_rd': '12345:993',
  'interfaces': ['993'],
  'name': 'VLAN2',
  'protocols': 'ipv4,ipv6'}
]

my_dict = [
 {'Device Name': '',
  'Hostname': 'switch1',
  'IP Address': '',
  'Interface Number': 'Gi1/0/2',
  'MAC': 'A0:B1:C2:D3:E4:F5',
  'VLAN': '503'},
 {'Device Name': '',
  'Hostname': 'switch1',
  'IP Address': '',
  'Interface Number': 'Gi1/0/3',
  'MAC': 'A1:B2:C3:D4:E5:F6',
  'VLAN': '510'},
 {'Device Name': '',
  'Hostname': 'switch1',
  'IP Address': '',
  'Interface Number': 'Gi1/0/4',
  'MAC': 'A2:B3:C4:D5:E6:F7',
  'VLAN': '515'},
 {'Device Name': '',
  'Hostname': 'switch1',
  'IP Address': '',
  'Interface Number': 'Gi1/0/5',
  'MAC': 'A3:B4:C5:D6:E7:F8',
  'VLAN': '993'},
 {'Device Name': '',
  'Hostname': 'switch1',
  'IP Address': '',
  'Interface Number': 'Gi1/0/6',
  'MAC': 'A4:B5:C6:D7:E8:F9',
  'VLAN': '750'}
]

vlans = ('Gi0/0', '503', '510', '515', '993')

我需要遍歷my_dict但如果my_dict["VLAN"]vlans元組中,那么我需要在vrfs中搜索並返回vrfs["name"]

所以像:

if vlan in vlans:
    print(f"show ip arp vrf {vrfs['name']} {my_dict}['MAC']")
else:
    print(f"show ip arp {my_dict}['MAC']")

我將如何做到這一點?

你的問題不清楚,但我按照我的理解去做。

for a in my_dict:
    if a['VLAN'] in vlans:
        for i in vrfs:
            if a['VLAN'] in i['interfaces']:
                print(i['name'])

OUTPUT:

VLAN1
VLAN1
VLAN1
VLAN2

如果您從vrfs中查找字典映射interfacesname ,那么您可以在單個列表理解中執行此操作。

vrfs_lookup = {key: item['name'] for item in vrfs for key in item['interfaces']}

names = [vrfs_lookup[item['VLAN']] for item in my_dict if item['VLAN'] in vlans]

這將為您提供名稱列表:

['VLAN1', 'VLAN1', 'VLAN1', 'VLAN2']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM