使用Jinja2在ansible中创建词典列表的问题

使用Jinja2在ansible中创建词典列表的问题,ansible,jinja2,Ansible,Jinja2,我试图通过解析2个列表在Ansible中创建一个字典列表,下面是代码 -name:创建数据字典列表 变量: _信丰:|- {%用于数据列表中的数据|默认值([])%} {%-if数据中的项['subject']%} [{grade:{data['grade']},id:{{data['id']},subject:{{data['subject']}] {%-endif-%} {%endfor%} 设定事实: 数据目录列表:{{data_dict_list}默认值([])+{sinfo}list}

我试图通过解析2个列表在Ansible中创建一个字典列表,下面是代码

-name:创建数据字典列表
变量:
_信丰:|-
{%用于数据列表中的数据|默认值([])%}
{%-if数据中的项['subject']%}
[{grade:{data['grade']},id:{{data['id']},subject:{{data['subject']}]
{%-endif-%}
{%endfor%}
设定事实:
数据目录列表:{{data_dict_list}默认值([])+{sinfo}list}”
有以下项目:
-“{{subject_list}}”
上面的脚本给了我一个字典列表,每个字符串都被分解成字母,并使用

data_dict_list:“{{data_dict_list}默认值([])+{sinfo | list | join}”
给我一个错误

列出值:
[u“物理”、“化学”、“生物学”、“数学”、“地质学]

库存文件:

数据列表:
-身份证号码:31
等级:['A+']
科目:物理
-身份证号码:40
等级:['B']
科目:数学
-身份证号码:30
等级:['A']
主题:生物学
-身份证号码:33
等级:['A+']
科目:物理
-身份证号码:35
等级:[“A+”,“B+”]
科目:物理
注:
Ansible版本:2.7.7
Python版本:2.7.18
Jinja2版本:2.11.2

我试图做的是按主题分组数据,并创建一个主题列表,其中每个主题词典包含该主题的所有数据。

Q:“按主题分组数据,创建一个主题列表,每个主题词典包含该主题的所有数据”

A:下面的任务是什么

-设置事实:
列表主题:{{list主题}默认([])+[{item.0:item.1}]}
循环:{{data_list}groupby('subject')}
-调试:
变量:列表主题
列出字典的清单

列表主题:
-生物学:
-等级:
-A
身份证号码:30
主题:生物学
-数学:
-等级:
-B
身份证号码:40
科目:数学
-物理学:
-等级:
-A+
身份证号码:31
科目:物理
-等级:
-A+
身份证号码:33
科目:物理
-等级:
-A+
-B+
身份证号码:35
科目:物理

然而,字典在这里可能更实用。比如说

-设置事实:
主语:{{dict(数据列表){groupby('subject'))}
-调试:
变量:dict_subc
给予

主语:
生物学:
-等级:
-A
身份证号码:30
主题:生物学
数学:
-等级:
-B
身份证号码:40
科目:数学
物理学:
-等级:
-A+
身份证号码:31
科目:物理
-等级:
-A+
身份证号码:33
科目:物理
-等级:
-A+
-B+
身份证号码:35
科目:物理

\u sinfo
不是一个列表,它只是一个非常大的字符串,这就是为什么在字符串上运行
list
会给出一个字符列表。它应该是一个包含单个字典的列表,它只是多行字符串,请参阅:谢谢@β.εηοιτ.βε它澄清了一些事情。谢谢,但我仍然得到了字符串分解为单个字符的输出。“[{item.0:item.1}]”做什么?是什么阻止您查看
-debug:msg:“{{[{item.0:item.1}]}”
在循环中?我是ansible的新手,所以不确定如何在循环中进行调试,但现在我明白了,谢谢您的帮助。按照你的建议使用字典效果更好。
msg: 'Unexpected templating type error occurred on ({{ data_dict_list|default([]) + _sinfo | list | join}}): can only concatenate list (not "unicode") to list'