如何遍历字典列表提取PrivateIP并添加至空列表
问题描述
我有一个JSON格式的列表,想要遍历其中ServerIPList内的PrivateIP字段,把对应的值添加到空列表InstanceId中。当前代码会遍历所有键并输出所有值,没法实现只提取PrivateIP的需求,期望结果是InstanceId = ["182.0.0.0", "182.1.1.1"]。
现有代码:
InstanceId = [] message = [{"SNowTicket":"RITM00001","ServerIPList":[{"PrivateIP":"182.0.0.0", "HostName":"ip-182-0-0-0.ec2.internal", "Region":"us-east-1", "AccountID":"12345678"}, {"PrivateIP": "182.1.1.1", "HostName": "ip-182-1-1-1.ec2.internal", "Region": "us-east-1", "AccountID": "12345678"}],"Operation":"stop","id":"text-123"}] for i in message: for key in i: print(key, i[key]) instanceIds.append(privateIP)
现有代码输出:
SNowTicket RITM00001 ServerIPList [{'PrivateIP': '182.0.0.0', 'HostName': 'ip-182-0-0-0.ec2.internal', 'Region': 'us-east-1', 'AccountID': '12345678'}, {'PrivateIP': '182.1.1.1', 'HostName': 'ip-182-1-1-1.ec2.internal', 'Region': 'us-east-1', 'AccountID': '12345678'}] Operation stop id text-123
修复后的代码
要实现需求,不需要遍历所有键,直接定位到ServerIPList字段,再遍历其中的每个字典提取PrivateIP即可,同时注意变量名的大小写一致性:
InstanceId = [] message = [{"SNowTicket":"RITM00001","ServerIPList":[{"PrivateIP":"182.0.0.0", "HostName":"ip-182-0-0-0.ec2.internal", "Region":"us-east-1", "AccountID":"12345678"}, {"PrivateIP": "182.1.1.1", "HostName": "ip-182-1-1-1.ec2.internal", "Region": "us-east-1", "AccountID": "12345678"}],"Operation":"stop","id":"text-123"}] # 遍历message中的每个元素(此处仅包含一个字典) for item in message: # 直接获取ServerIPList列表,避免键不存在时抛出异常 server_list = item.get("ServerIPList", []) # 遍历每个服务器字典,提取PrivateIP for server in server_list: private_ip = server.get("PrivateIP") if private_ip: # 可选:过滤空值,避免无效数据加入列表 InstanceId.append(private_ip) print(InstanceId)
代码说明
- 原代码的问题:
- 无差别遍历字典所有键,没有针对性访问目标字段
ServerIPList - 变量名大小写不一致:定义的是
InstanceId,添加元素时误用instanceIds privateIP变量未定义,直接使用会触发报错
- 无差别遍历字典所有键,没有针对性访问目标字段
- 修复逻辑:
- 通过键名直接定位
ServerIPList,跳过无关字段的遍历 - 遍历
ServerIPList中的每个服务器字典,精准提取PrivateIP值 - 使用
get()方法访问字典键,避免键不存在时的异常,提升代码健壮性
- 通过键名直接定位
运行后输出:
["182.0.0.0", "182.1.1.1"]
内容的提问来源于stack exchange,提问作者shailysharma
相关产品推荐
相关产品推荐

