我如何映射键,在另一个字典中查找它们?
How can I map keys, looking them up in another dict?
鉴于这些词典:
somedict:
key1: value1
key2: value2
otherdict:
key1: mapped1
key2: mapped2
如何映射 somedict
,通过在 Ansible 中的 otherdict
中查找来更改其键?结果应该是这样的:
mapped1: value1
mapped2: value2
似乎用这种声明性的东西应该是可行的:
{{ somedict | map(<MAP KEY>) | list }}
或者我真的必须为这种事情使用命令式循环吗?
以下
{{ somedict | map('extract', otherdict) | list }}
成功映射键,但在此过程中丢失了值...
Q: "The result should be this:"
mapped1: value1
mapped2: value2
答:下面的任务
- debug:
msg: "{{ somedict|
map('extract', otherdict)|
zip(somedict|
dict2items|
map(attribute='value'))|
list }}"
给出列表列表。这不是预期的结果
msg:
- - mapped1
- value1
- - mapped2
- value2
要接收词典,请应用 dict 函数并删除 list 过滤器。例如
- debug:
msg: "{{ dict(somedict|
map('extract', otherdict)|
zip(somedict|
dict2items|
map(attribute='value'))) }}"
给予
msg:
mapped1: value1
mapped2: value2
这可以进一步简化。下面的任务给出了相同的字典
- debug:
msg: "{{ dict(somedict|
map('extract', otherdict)|
zip(somedict.values())) }}"
笔记
- 将字典转换为字典键列表中的列表结果。例如
- debug:
msg: "{{ somedict|list }}"
给予
msg:
- key1
- key2
- 字典键的列表也可以达到同样的效果
- debug:
msg: "{{ somedict.keys()|list }}"
鉴于这些词典:
somedict:
key1: value1
key2: value2
otherdict:
key1: mapped1
key2: mapped2
如何映射 somedict
,通过在 Ansible 中的 otherdict
中查找来更改其键?结果应该是这样的:
mapped1: value1
mapped2: value2
似乎用这种声明性的东西应该是可行的:
{{ somedict | map(<MAP KEY>) | list }}
或者我真的必须为这种事情使用命令式循环吗?
以下
{{ somedict | map('extract', otherdict) | list }}
成功映射键,但在此过程中丢失了值...
Q: "The result should be this:"
mapped1: value1
mapped2: value2
答:下面的任务
- debug:
msg: "{{ somedict|
map('extract', otherdict)|
zip(somedict|
dict2items|
map(attribute='value'))|
list }}"
给出列表列表。这不是预期的结果
msg:
- - mapped1
- value1
- - mapped2
- value2
要接收词典,请应用 dict 函数并删除 list 过滤器。例如
- debug:
msg: "{{ dict(somedict|
map('extract', otherdict)|
zip(somedict|
dict2items|
map(attribute='value'))) }}"
给予
msg:
mapped1: value1
mapped2: value2
这可以进一步简化。下面的任务给出了相同的字典
- debug:
msg: "{{ dict(somedict|
map('extract', otherdict)|
zip(somedict.values())) }}"
笔记
- 将字典转换为字典键列表中的列表结果。例如
- debug:
msg: "{{ somedict|list }}"
给予
msg:
- key1
- key2
- 字典键的列表也可以达到同样的效果
- debug:
msg: "{{ somedict.keys()|list }}"