Python比较contains和showing匹配的两个dicts值

2024-04-25 12:46:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我可以看到很多类似的问题,但我没有太多的运气找到答案

我有两个字典的值,我想匹配,但不同的键。我尝试了一个匹配查询,但它返回空的。我想可能是因为找不到匹配的关键字?或者不迭代k,v对?但我不知道该怎么办

interface_list = [
        {'ifIndex': 19, 'Caption': 'GigabitEthernet0/0/0 *** Uplink ***', 'ifType': 131, 'ifSubType': 0, 'InterfaceID': 0, 'Manageable': True, 'ifSpeed': 0.0, 'ifAdminStatus': 0, 'ifOperStatus': 4},
        {'ifIndex': 19, 'Caption': 'GigabitEthernet0/0/1', 'ifType': 131, 'ifSubType': 0, 'InterfaceID': 0, 'Manageable': True, 'ifSpeed': 0.0, 'ifAdminStatus': 0, 'ifOperStatus': 4},
        {'ifIndex': 19, 'Caption': 'GigabitEthernet0/0/2', 'ifType': 131, 'ifSubType': 0, 'InterfaceID': 0, 'Manageable': True, 'ifSpeed': 0.0, 'ifAdminStatus': 0, 'ifOperStatus': 4},
        {'ifIndex': 19, 'Caption': 'Tunnel100', 'ifType': 131, 'ifSubType': 0, 'InterfaceID': 0, 'Manageable': True, 'ifSpeed': 0.0, 'ifAdminStatus': 0, 'ifOperStatus': 4},
        {'ifIndex': 20, 'Caption': 'Vlan5', 'ifType': 53, 'ifSubType': 0, 'InterfaceID': 0, 'Manageable': True, 'ifSpeed': 0.0, 'ifAdminStatus': 0, 'ifOperStatus': 4},
        {'ifIndex': 21, 'Caption': 'Vlan10', 'ifType': 53, 'ifSubType': 0, 'InterfaceID': 0, 'Manageable': True, 'ifSpeed': 0.0, 'ifAdminStatus': 0, 'ifOperStatus': 4},
        {'ifIndex': 22, 'Caption': 'Vlan15', 'ifType': 53, 'ifSubType': 0, 'InterfaceID': 0, 'Manageable': True, 'ifSpeed': 0.0, 'ifAdminStatus': 0, 'ifOperStatus': 4},
]

wanted_interfaces = [{'resource': 'GigabitEthernet0/0/0'}, {'resource': 'Vlan5'}]

>>> matches = [i for str(i) in wanted_interfaces if i in interface_list]
>>> matches
[]

它应该有希望返回包含“GigabitEthernet0/0/0*Uplink*”的记录作为匹配


Tags: trueinterfacelistuplinkcaptiongigabitethernet0ifindexifadminstatus
1条回答
网友
1楼 · 发布于 2024-04-25 12:46:53

要进行全面扫描(假设要检查两个列表中每个dict中的每个值),必须执行以下操作:

matches = [
    v for d1 in interface_list for v in d1.values() 
    if any(isinstance(v, str) and vw in v for d2 in wanted_interfaces for vw in d2.values())
]
# ['GigabitEthernet0/0/0 *** Uplink ***']

相关问题 更多 >