Python-比较包含和显示匹配项的两个字典值

时间:2018-11-16 12:19:04

标签: python

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

我有两个字典,它们的值要与之匹配,但键不同。香港专业教育学院试图进行匹配查询,但其返回为空。我认为可能是因为缺少匹配的键名?还是不迭代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 *上行链路* ”作为匹配项的记录

1 个答案:

答案 0 :(得分:1)

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

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 ***']