Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 不可分配列表未排序_Python 2.7_Ansible - Fatal编程技术网

Python 2.7 不可分配列表未排序

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

我有一个清单,我正在循环,问题是它给出了一个奇怪的顺序

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) => {
    "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
字段上排序