【jmespath】—4. 进阶 Flatten Projections

简介: 【jmespath】—4. 进阶 Flatten Projections

这里要怎么翻呢?扁平投影?


一、Flatten Projections


1. 核心1


这个可以暂时忽略,一个重要的核心是:对于列表/对象投影,在投影中创建投影时,原始文档的结构将保留。


1268169-20200702165620270-1402000854.gif


说人话就是,比如下面的例子。


可以看到,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'] 这个列表要怎么办?


1268169-20200702165231861-167331308.png


这就是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] 与列表其他元素同级。

相关文章
|
8月前
|
机器学习/深度学习 PyTorch 算法框架/工具
torch.nn.Linear的使用方法
torch.nn.Linear的使用方法
209 0
|
机器学习/深度学习 PyTorch 算法框架/工具
RGCN的torch简单案例
RGCN 是指 Relational Graph Convolutional Network,是一种基于图卷积神经网络(GCN)的模型。与传统的 GCN 不同的是,RGCN 可以处理具有多种关系(边)类型的图数据,从而更好地模拟现实世界中的实体和它们之间的复杂关系。 RGCN 可以用于多种任务,例如知识图谱推理、社交网络分析、药物发现等。以下是一个以知识图谱推理为例的应用场景: 假设我们有一个知识图谱,其中包含一些实体(如人、物、地点)以及它们之间的关系(如出生于、居住在、工作于)。图谱可以表示为一个二元组 (E, R),其中 E 表示实体的集合,R 表示关系的集合,每个关系 r ∈ R
1400 0
|
3月前
|
PyTorch 算法框架/工具
Pytorch学习笔记(五):nn.AdaptiveAvgPool2d()函数详解
PyTorch中的`nn.AdaptiveAvgPool2d()`函数用于实现自适应平均池化,能够将输入特征图调整到指定的输出尺寸,而不需要手动计算池化核大小和步长。
244 1
Pytorch学习笔记(五):nn.AdaptiveAvgPool2d()函数详解
|
3月前
|
PyTorch 算法框架/工具
Pytorch学习笔记(六):view()和nn.Linear()函数详解
这篇博客文章详细介绍了PyTorch中的`view()`和`nn.Linear()`函数,包括它们的语法格式、参数解释和具体代码示例。`view()`函数用于调整张量的形状,而`nn.Linear()`则作为全连接层,用于固定输出通道数。
146 0
Pytorch学习笔记(六):view()和nn.Linear()函数详解
|
3月前
|
机器学习/深度学习 PyTorch TensorFlow
Pytorch学习笔记(二):nn.Conv2d()函数详解
这篇文章是关于PyTorch中nn.Conv2d函数的详解,包括其函数语法、参数解释、具体代码示例以及与其他维度卷积函数的区别。
369 0
Pytorch学习笔记(二):nn.Conv2d()函数详解
|
3月前
|
PyTorch 算法框架/工具
Pytorch学习笔记(三):nn.BatchNorm2d()函数详解
本文介绍了PyTorch中的BatchNorm2d模块,它用于卷积层后的数据归一化处理,以稳定网络性能,并讨论了其参数如num_features、eps和momentum,以及affine参数对权重和偏置的影响。
308 0
Pytorch学习笔记(三):nn.BatchNorm2d()函数详解
|
3月前
|
PyTorch 算法框架/工具
Pytorch学习笔记(四):nn.MaxPool2d()函数详解
这篇博客文章详细介绍了PyTorch中的nn.MaxPool2d()函数,包括其语法格式、参数解释和具体代码示例,旨在指导读者理解和使用这个二维最大池化函数。
205 0
Pytorch学习笔记(四):nn.MaxPool2d()函数详解
|
3月前
|
机器学习/深度学习 PyTorch 算法框架/工具
Pytorch学习笔记(八):nn.ModuleList和nn.Sequential函数详解
PyTorch中的nn.ModuleList和nn.Sequential函数,包括它们的语法格式、参数解释和具体代码示例,展示了如何使用这些函数来构建和管理神经网络模型。
203 1
torch.argmax(dim=1)用法
)torch.argmax(input, dim=None, keepdim=False)返回指定维度最大值的序号;
656 0
|
PyTorch 算法框架/工具
PyTorch中 nn.Conv2d与nn.ConvTranspose2d函数的用法
PyTorch中 nn.Conv2d与nn.ConvTranspose2d函数的用法
539 2
PyTorch中 nn.Conv2d与nn.ConvTranspose2d函数的用法