【jmespath】—4. 进阶 Flatten Projections
2021/4/23 18:26:46
本文主要是介绍【jmespath】—4. 进阶 Flatten Projections,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
这里要怎么翻呢?扁平投影?
一、Flatten Projections
1. 核心1
这个可以暂时忽略,一个重要的核心是:对于列表/对象投影,在投影中创建投影时,原始文档的结构将保留。
说人话就是,比如下面的例子。
可以看到,reservations列表
中嵌套了字典
,而instances的value
,又是一个列表
。
这时候,用reservations[*].instances[*].state
,那么得到的值又是什么样子的呢?
原来是列表中的元素会被拆散,重新装到结果列表里吗?
import jmespath dic_1 = { "reservations": [ { "instances": [ {"state": "running"}, {"state": "stopped"} ] }, { "instances": [ {"state": "terminated"}, {"state": "running"} ] } ] } path = jmespath.search("reservations[*].instances[*].state", dic_1) print(path)
运行一下,可以看到结果列表中,原来是列表的还是列表:
D:\Daily\whatisyeild>python jmespath_demo.py [['running', 'stopped'], ['terminated', 'running']]
我们可以再回过来看reservations[*].instances[*]
,其实最外层的[]
就是 reservations[*]
创建的.
而内部的每一个实例instances[*]
,也会各自再创建出投影列表,所以结果中最外层的[]
里包含了2个子元素[]
。
2. 核心2
那如果我就是要['running', 'stopped', 'terminated', 'running']
这个列表要怎么办?
这就是Flatten Projections的另一个核心了,根据上面核心1
里说的,如果只要保留最外侧的[]
,
那么内层的实例就不需要再初始化创建[]
了,那么就去掉*
试一下。
dic_1 = { "reservations": [ { "instances": [ {"state": "running"}, {"state": "stopped"} ] }, { "instances": [ {"state": "terminated"}, {"state": "running"} ] } ] } path = jmespath.search("reservations[*].instances[].state", dic_1) print(path) #运行结果 D:\Daily\whatisyeild>python jmespath_demo.py ['running', 'stopped', 'terminated', 'running']
结果是['running', 'stopped', 'terminated', 'running']
,搞定。
总结一下它的2个特点:
- 它将子列表展平到父列表中(不是递归的,只是一个级别)。
- 它将创建一个投影,右边的任何内容都将投影到新创建的列表上。
可以试一下,比如下面例子里有个嵌套列表,先来用[*]
看一下,原始的列表结构:
import jmespath dic_1 = [ [0, 1], 2, [3], 4, [5, [6, 7]] ] path = jmespath.search("[*]", dic_1) print(path) #运行结果 D:\Daily\whatisyeild>python jmespath_demo.py [[0, 1], 2, [3], 4, [5, [6, 7]]]
结果是[[0, 1], 2, [3], 4, [5, [6, 7]]]
,这时候用[]
展开列表试一下:
import jmespath dic_1 = [ [0, 1], 2, [3], 4, [5, [6, 7]] ] path = jmespath.search("[]", dic_1) print(path) #运行结果 D:\Daily\whatisyeild>python jmespath_demo.py [0, 1, 2, 3, 4, 5, [6, 7]]
可以看到,列表成功展开,[0, 1, 2, 3, 4, 5, [6, 7]]
,不是递归展开,只是同级,子列表[6, 7]
与列表其他元素同级。
这篇关于【jmespath】—4. 进阶 Flatten Projections的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-25【机器学习(二)】分类和回归任务-决策树(Decision Tree,DT)算法-Sentosa_DSML社区版
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享