Dictionary 用于在地图[1,2]中将字典构造为[{';x';:1},{';x';:2}]
大多数Jinja过滤器都是关于减少数据量的。 如果我想把它弄大一点呢 输入 名单。这些值可以是简单的,也可以是复杂的Dictionary 用于在地图[1,2]中将字典构造为[{';x';:1},{';x';:2}],dictionary,ansible,jinja2,Dictionary,Ansible,Jinja2,大多数Jinja过滤器都是关于减少数据量的。 如果我想把它弄大一点呢 输入 名单。这些值可以是简单的,也可以是复杂的 - 1 - 'a' - ['b', 'c'] - {'d': 'e'} 期望输出 我想列出一份清单 与输入列表的长度相同 新列表中的每一项都是一本词典 有一对(键、值) 密钥是硬编码的,输出列表中的每个项目都是相同的 该值是输入列表中的对应项 我要找的是 {{ input | map(some_filter, key='x') | list }} 我可以用什么作为一些过滤
- 1
- 'a'
- ['b', 'c']
- {'d': 'e'}
期望输出
我想列出一份清单
- 与输入列表的长度相同
- 新列表中的每一项都是一本词典 有一对(键、值)
- 密钥是硬编码的,输出列表中的每个项目都是相同的
- 该值是输入列表中的对应项
{{ input | map(some_filter, key='x') | list }}
我可以用什么作为一些过滤器
笔记
我用Ansible来做这个。
因此,使用JMESPath和json_查询
过滤器的解决方案是有效的。
类似地,Ansible的解决方案使用了
dict2items
或items2dict
某种程度上也是有效的。下面的任务完成了这项工作
-调试:
msg:{input | json_查询('[*].{x:@}')}
给予
在这里是无用的,因为输入是一个列表。在这里也是无用的,因为结果也应该是一个列表。此外,它也是无用的,因为它不是过滤器,不能在
map
中使用。如果没有json\u查询
必须使用循环
。比如说
-设置事实:
输出:“{output+[{'x':项}]}”
循环:“{input}}”
变量:
输出:[]
可以编写一个过滤器。比如说
shell>cat过滤器插件/item2dict.py
def项目2DICT(t):
h={t[0]:t[1]}
返回h
类FilterModule(对象):
''Ansible过滤器。第2项信息技术“
def过滤器(自):
返回{
“item2dict”:item2dict
}
然后下面的任务给出相同的结果
-调试:
msg:{'x'|产品(输入)|映射('item2dict')|列表}”
{{ input | map(some_filter, key='x') | list }}
msg:
- x: 1
- x: a
- x:
- b
- c
- x:
d: e