gpt4 book ai didi

python - 根据具有子字符串的特定值删除字典项

转载 作者:行者123 更新时间:2023-12-01 07:38:55 26 4
gpt4 key购买 nike

我有一个基于 Cisco 交换机的命令“show cdp neighborDetail”输出的字典。该字典有 200 多个键值对。示例字典对如下。

{'device_id': 'Switch-Hostname1', 'ip_address': '1.1.1.1', 'platform': 'Cisco IP Phone', 'capabilities': 'Host Phone Two-port Mac Relay', 'local_port': 'GigabitEthernet1/1', 'remote_port': 'Port 1'}
{'device_id': 'Phone-Hostname2', 'ip_address': '2.2.2.2', 'platform': 'WS-C3750', 'capabilities': 'Switch IGMP', 'local_port': 'GigabitEthernet1/2', 'remote_port': 'FastEthernet1/0/48'}
{'device_id': 'AccessPoint-Hostname3', 'ip_address': '3.3.3.3', 'platform': 'AIR-CAP3700-K9', 'capabilities': 'Trans-Bridge Source-Route-Bridge IGMP', 'local_port': 'GigabitEthernet1/3', 'remote_port': 'GigabitEthernet0'}

我需要根据字典键“platform”的值删除字典项目。键“platform”的对应值不应包含子字符串“AIR-”,如上面示例代码的第三个条目中提到的。

请告诉我如何实现这一点,我正在使用 Python 3。

编辑实际上,我想删除键“platform”的值中具有子字符串“AIR-”的字典。而且,在第一次过滤之后,我想从剩余的字典中检索“local_port”的值,最好是在列表中。

最佳答案

您的问题有点不清楚,如果特定值有子字符串,您是要求仅删除包含子字符串的项目还是整个字典?

在第一种情况下,您可以使用字典推导式,如下所示:

orig = {'device_id': 'AccessPoint-Hostname3', 'ip_address': '3.3.3.3', 'platform': 'AIR-CAP3700-K9', 'capabilities': 'Trans-Bridge Source-Route-Bridge IGMP', 'local_port': 'GigabitEthernet1/3', 'remote_port': 'GigabitEthernet0'}
new = {k: v for k, v in orig.items() if substr not in v}

在第二种情况下,您可以使用列表理解:

info_old = [{'device_id': 'Switch-Hostname1', 'ip_address': '1.1.1.1', 'platform': 'Cisco IP Phone', 'capabilities': 'Host Phone Two-port Mac Relay', 'local_port': 'GigabitEthernet1/1', 'remote_port': 'Port 1'},
{'device_id': 'Phone-Hostname2', 'ip_address': '2.2.2.2', 'platform': 'WS-C3750', 'capabilities': 'Switch IGMP', 'local_port': 'GigabitEthernet1/2', 'remote_port': 'FastEthernet1/0/48'},
{'device_id': 'AccessPoint-Hostname3', 'ip_address': '3.3.3.3', 'platform': 'AIR- CAP3700-K9', 'capabilities': 'Trans-Bridge Source-Route-Bridge IGMP', 'local_port': 'GigabitEthernet1/3', 'remote_port': 'GigabitEthernet0'}]

info_new = [r for r in info_old if not substr in r[field]]

其中 substr 是您想要避免的字符串 ("AIR-"),field 是您要查找的字段(在您的情况下“平台”)

编辑:该问题已被编辑以使其现在更清晰一些。对于第一部分,给定的解决方案应该按预期工作:

info_new = [r for r in info_old if not substr in r[unwanted_field]]

对于第二部分,您可以进行另一个列表理解:

ports = [r[wanted_field] for r in info_new]

或者,如果您不需要清理字典列表来执行其他任何操作,您可以将其合并为单个推导式,如下所示:

ports = [r[wanted_field] for r in info_old if not substr in r[unwanted_field]]

其中 info_old 是原始词典列表,substr 是要解析的部分 ("AIR-"),wanted_field 包含您要隔离的值的字段名称 ("local_port") 和 unwanted_field 您要搜索的字段名称substr(“平台”)

关于python - 根据具有子字符串的特定值删除字典项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56823049/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com