Python中提取列表内CidrIp对应IP地址的实现方法
提取CidrIp值的实现方法
给定的是嵌套的字典列表结构,要提取所有CidrIp对应的值,你可以通过以下两种方式实现:
方法一:嵌套循环遍历
先把给定的结构赋值给变量,然后逐层遍历提取:
# 定义原始数据 data = [{'IpProtocol': '-1', 'IpRanges': [{'CidrIp': '10.113.97.0/26'}, {'CidrIp': '10.111.0.0/22'}, {'CidrIp': '10.140.0.0/16'}, {'CidrIp': '10.141.0.0/16'}, {'CidrIp': '10.145.0.0/16'}, {'CidrIp': '10.112.0.0/26'}, {'CidrIp': '10.112.0.64/26'}], 'Ipv6Ranges': [], 'PrefixListIds': [], 'UserIdGroupPairs': []}] cidr_ips = [] # 遍历外层列表的每个规则字典 for rule in data: # 遍历当前规则下的IpRanges列表 for ip_range in rule['IpRanges']: # 提取CidrIp值并添加到结果列表 cidr_ips.append(ip_range['CidrIp']) print(cidr_ips)
方法二:列表推导式(更简洁)
用Python的列表推导式可以一行完成提取:
data = [{'IpProtocol': '-1', 'IpRanges': [{'CidrIp': '10.113.97.0/26'}, {'CidrIp': '10.111.0.0/22'}, {'CidrIp': '10.140.0.0/16'}, {'CidrIp': '10.141.0.0/16'}, {'CidrIp': '10.145.0.0/16'}, {'CidrIp': '10.112.0.0/26'}, {'CidrIp': '10.112.0.64/26'}], 'Ipv6Ranges': [], 'PrefixListIds': [], 'UserIdGroupPairs': []}] cidr_ips = [ip_range['CidrIp'] for rule in data for ip_range in rule['IpRanges']] print(cidr_ips)
为什么之前的s.strip和map方法无效?
s.strip是用来去除字符串首尾空白字符的方法,而你处理的是嵌套的字典列表结构,不是纯字符串,所以该方法不适用。map函数通常用来对序列中的每个元素执行统一操作,但这里需要深入到两层嵌套结构中提取值,直接使用map无法处理这种嵌套逻辑,需要结合复杂的lambda表达式,反而不如循环或列表推导式直观易读。
内容的提问来源于stack exchange,提问作者Orion
相关产品推荐
相关产品推荐

