如何过滤Jinja中的字典? [英] How to filter dictionaries in Jinja?
问题描述
我有一个字典,其中包名是 key ,而一些细节的字典是 value :
I have a dictionary of packages with package-name being the key and a dictionary of some details being the value:
{
"php7.1-readline": {
"latest": "7.1.9-1+ubuntu14.04.1+deb.sury.org+1",
"origins": [
"ppa.launchpad.net"
],
"version": "7.1.6-2~ubuntu14.04.1+deb.sury.org+1",
"www": "http://www.php.net/"
},
"php7.1-xml": {
"latest": "7.1.9-1+ubuntu14.04.1+deb.sury.org+1",
"origins": [
"ppa.launchpad.net"
],
"version": "7.1.6-2~ubuntu14.04.1+deb.sury.org+1",
"www": "http://www.php.net/"
},
"plymouth": {
"version": "0.8.8-0ubuntu17.1"
},
....
}
我想将以上内容简化为仅包含值具有latest
属性的软件包的字典.
I'd like to reduce the above to a dictionary with only the packages, that have the latest
-attribute in their values.
似乎json_query
是要使用的过滤器,但我不知道语法.那里的例子似乎都是在字典的列表上运行的,而不是在同一个字典的 dictionaries 上运行的.
It would seem like json_query
is the filter to use, but I can't figure out the syntax. The examples out there all seem to operate on lists of dictionaries, not dictionaries of same...
例如,如果我将上述字典输送"到json_query('*.latest')
中,则会得到实际最新版本的列表:
For example, if I "pipe" the above dictionary into json_query('*.latest')
, I get the list of the actual latest versions:
[
"7.1.9-1+ubuntu14.04.1+deb.sury.org+1",
"7.1.9-1+ubuntu14.04.1+deb.sury.org+1",
"7.1.6-2~ubuntu14.04.1+deb.sury.org+1"
]
我该如何获取整个字典元素?
How can I get the entire dictionary-elements instead?
有希望吗?
推荐答案
With dict2items
filter added in December 2017, it is possible using native functionality:
- debug:
msg: "{{ dict(pkg | dict2items | json_query('[?value.latest].[key, value.latest]')) }}"
结果:
"msg": {
"php7.1-readline": "7.1.9-1+ubuntu14.04.1+deb.sury.org+1",
"php7.1-xml": "7.1.9-1+ubuntu14.04.1+deb.sury.org+1"
}
这篇关于如何过滤Jinja中的字典?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!