如何反向查找 ansible dict?
How do I reverse lookup on an ansible dict?
有没有办法将一个字典转换成另一个字典,以便根据内部字段反转查找?我希望每个项目的内部字段都是唯一的,并且始终存在。这是我想要做的事情的一个例子。
我有这样的数据结构:
lookup_dict:
a1:
b: 123
a2:
b: 456
a3:
b: 789
a
和 b
之间的映射是一对一的映射。我想将其转换为:
reverse_lookup_dict:
123: a1
456: a2
789: a3
所以我可以使用 b 对 a 执行反向查找。
经过一番研究,我发现答案如下:
name: Reverse Lookup
set_fact:
reverse_lookup_dict: "{{reverse_lookup_dict|default({})|combine({item.value.b: item.key})}}"
loop: "{{lookup('dict', lookup_dict)}}"
你可以通过使用 vars 和 dict2items
+ items2dict
:
这是一个名为 forward
的示例映射(将愚蠢的字符串映射到 ID),它是根据名为 reverse
:
的反向映射构建的
reverse:
0x0019: staff
0x011a: visitors
0x3bbe: executives
0xf9c4: vpn
forward: >-
{{ reverse
| dict2items
| items2dict(key_name="value", value_name="key" }}
有没有办法将一个字典转换成另一个字典,以便根据内部字段反转查找?我希望每个项目的内部字段都是唯一的,并且始终存在。这是我想要做的事情的一个例子。
我有这样的数据结构:
lookup_dict:
a1:
b: 123
a2:
b: 456
a3:
b: 789
a
和 b
之间的映射是一对一的映射。我想将其转换为:
reverse_lookup_dict:
123: a1
456: a2
789: a3
所以我可以使用 b 对 a 执行反向查找。
经过一番研究,我发现答案如下:
name: Reverse Lookup
set_fact:
reverse_lookup_dict: "{{reverse_lookup_dict|default({})|combine({item.value.b: item.key})}}"
loop: "{{lookup('dict', lookup_dict)}}"
你可以通过使用 vars 和 dict2items
+ items2dict
:
这是一个名为 forward
的示例映射(将愚蠢的字符串映射到 ID),它是根据名为 reverse
:
reverse:
0x0019: staff
0x011a: visitors
0x3bbe: executives
0xf9c4: vpn
forward: >-
{{ reverse
| dict2items
| items2dict(key_name="value", value_name="key" }}