如何反向查找 ansible dict?

问题描述 投票:0回答:2

有没有办法将一个字典转换为另一个字典,以便根据内部字段反转查找? 我希望每个项目的内部字段都是唯一的,并且始终存在。 这是我想做的一个例子。

我有这样的数据结构:

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。

ansible ansible-2.x
2个回答
3
投票

经过一番研究,我发现答案如下:

name: Reverse Lookup
set_fact:
  reverse_lookup_dict: "{{reverse_lookup_dict|default({})|combine({item.value.b: item.key})}}"
loop: "{{lookup('dict', lookup_dict)}}"

3
投票

您只需使用 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") }}
© www.soinside.com 2019 - 2024. All rights reserved.