Ansible 如何在易读词典上反向查找?
有没有办法将一个dict转换成另一个dict,以便根据内部字段反转查找?我希望每个项目的内部字段都是唯一的,并且始终存在。下面是我想做的一个例子 我有这样的数据结构:Ansible 如何在易读词典上反向查找?,ansible,ansible-2.x,Ansible,Ansible 2.x,有没有办法将一个dict转换成另一个dict,以便根据内部字段反转查找?我希望每个项目的内部字段都是唯一的,并且始终存在。下面是我想做的一个例子 我有这样的数据结构: lookup_dict: a1: b: 123 a2: b: 456 a3: b: 789 a和b之间的映射是1对1和到。我想将其转换为: reverse_lookup_dict: 123: a1 456: a2 789: a3 因此,我可以使用b执行a的反向查找。经过一些研究,
lookup_dict:
a1:
b: 123
a2:
b: 456
a3:
b: 789
a和b之间的映射是1对1和到。我想将其转换为:
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:
我试图通过在循环中使用set_fact模块向转换的_stuff变量添加key:value对来满足您的要求。但是在每次迭代中,它都会完全覆盖变量,因此以前的key/value对丢失。您是否可以选择将转换后的内容作为单个键/值对的列表?我收到了stuff中的结构,但我需要在以后根据外部内容查找项目内容。它应该是item.value.external,感谢您分享解决方案我喜欢这样;它比我的干净。用例稍有不同,在我的forward中,值本身是一个dict,该dict的一个值将是相反的键。
reverse:
0x0019: staff
0x011a: visitors
0x3bbe: executives
0xf9c4: vpn
forward: >-
{{ reverse
| dict2items
| items2dict(key_name="value", value_name="key" }}