Python 2.7 不可分配列表未排序
我有一个清单,我正在循环,问题是它给出了一个奇怪的顺序 param.yml文件:Python 2.7 不可分配列表未排序,python-2.7,ansible,Python 2.7,Ansible,我有一个清单,我正在循环,问题是它给出了一个奇怪的顺序 param.yml文件: my_list: a: val1 b: val2 c: val3 d: val3 下面是我的简单调试循环: - name: debug debug: msg: "{{ item }}" loop: "{{ my_list | list }}" 以下是输出: ok: [host] => (item=a) => { &quo
my_list:
a: val1
b: val2
c: val3
d: val3
下面是我的简单调试循环:
- name: debug
debug:
msg: "{{ item }}"
loop: "{{ my_list | list }}"
以下是输出:
ok: [host] => (item=a) => {
"msg": "a"
}
ok: [host] => (item=c) => {
"msg": "c"
}
ok: [host] => (item=b) => {
"msg": "b"
}
ok: [host] => (item=d) => {
"msg": "d"
}
我将ansible 2.10与python 2.7.5结合使用:
ansible --version
ansible 2.10.2
config file = /home/ansible.cfg
configured module search path = [u'/home/ansible/library']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /bin/ansible
python version = 2.7.5 (default, Apr 2 2020, 13:16:51) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
问题是,当我切换到python3时,它正按预期工作:
ok: [host] => (item=a) => {
"msg": "a"
}
ok: [host] => (item=b) => {
"msg": "b"
}
ok: [host] => (item=c) => {
"msg": "c"
}
ok: [host] => (item=d) => {
"msg": "d"
}
不幸的是,我无法将环境升级到python3,我需要列表的顺序与param.yml文件中的顺序相同
谢谢大家! 变量my_list不是一个列表。这是一本字典。无法保证字典的键将以何种顺序进行迭代。使用过滤器。比如说
循环:{{my_list | list | sort}”
Q:“我需要以与param.yml中相同的顺序对其进行迭代” 答:对于一个用例来说,它的数据结构是错误的。。您不能“以相同的顺序迭代”,因为没有顺序。使用密钥列表。比如说
-调试:
msg:{{item}}:{{my_list[item]}
循环:{{my_keys}}”
变量:
我的钥匙:[a、b、c、d]
给出(节略)
msg:'a:val1'
msg:'b:val2'
msg:'c:val3'
msg:'d:val3'
下面是列表的迭代示例。任务
-调试:
msg:“{{item}}”
循环:{{my_list}}”
变量:
我的清单:
-a:瓦尔1
-b:val2
-c:val3
-d:val3
给出(节略)
msg:
a:瓦尔1
味精:
b:val2
味精:
c:val3
味精:
d:val3
谢谢您的回复,问题我的列表
我无法排序,我需要按照param.yml
文件中的相同顺序对其进行迭代(我只是在这里简化了它)此问题没有解决方案。i、 e.你不能“以相同的顺序迭代”,因为没有顺序。谢谢,这个文件包含对象的dict,最后还有一个自动插入到这个文件中,我需要通过ansible获得最后10个插入的对象,将其转换为列表,得到最后10个没有用的对象(由于这个随机顺序),你知道我该怎么做吗?你必须自己解析这个文件。@sadok-f基于这个答案,你可以做的是让一个dict同时包含你要排序的值和字段(对不起,这是JSON符号,比YAML符号更适合于注释),例如{'a':{'value':'val1','added_at':'2020-10-07 08:00:00'}
然后在此added_at
字段上排序