如何使用Jinja2提取嵌套列表中的snapshot_id属性
使用Jinja2提取嵌套列表中的
snapshot_id属性 问题场景
你有如下嵌套列表结构的JSON数据,需要提取所有元素中的snapshot_id属性:
[ [ { "device_name":"/dev/sda1", "ebs":{ "delete_on_termination":true, "snapshot_id":"snap-0456a553a80e6826a", "volume_size":30, "volume_type":"gp2", "encrypted":true } } ], [ { "device_name":"/dev/sda1", "ebs":{ "delete_on_termination":true, "snapshot_id":"snap-001c3143228559631", "volume_size":30, "volume_type":"gp2", "encrypted":true } } ], [ { "device_name":"/dev/sda1", "ebs":{ "delete_on_termination":true, "snapshot_id":"snap-040d15cdb5d8aaf33", "volume_size":30, "volume_type":"gp2", "encrypted":true } } ] ]
实现方法
由于数据是两层嵌套列表(外层列表的每个元素都是仅包含一个字典的子列表),可以通过以下两种方式提取目标属性:
1. 嵌套循环输出
直接通过两层for循环遍历到最内层的字典,提取snapshot_id:
{% for outer_list in input_data %} {% for item in outer_list %} {{ item.ebs.snapshot_id }} {% endfor %} {% endfor %}
2. 列表推导式收集结果
如果需要将所有snapshot_id整理成一个列表,可以使用Jinja2的列表推导式:
{# 先收集所有snapshot_id到变量中 #} {% set snapshot_ids = [item.ebs.snapshot_id for outer_list in input_data for item in outer_list] %} {# 输出结果列表 #} {{ snapshot_ids }}
执行后会得到结果:
['snap-0456a553a80e6826a', 'snap-001c3143228559631', 'snap-040d15cdb5d8aaf33']
内容的提问来源于stack exchange,提问作者Sameer Joshi
相关产品推荐
相关产品推荐

