代码之家  ›  专栏  ›  技术社区  ›  bitsplit

如何对可回答的口述进行反向查找?

  •  2
  • bitsplit  · 技术社区  · 8 年前

    是否有方法将一个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执行反向查找。

    2 回复  |  直到 7 年前
        1
  •  3
  •   bitsplit    7 年前

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

    name: Reverse Lookup
    set_fact:
      reverse_lookup_dict: "{{reverse_lookup_dict|default({})|combine({item.value.b: item.key})}}"
    loop: "{{lookup('dict', lookup_dict)}}"
    
        2
  •  1
  •   Eddy G    7 年前

    只需使用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" }}