dict键值为列表时如何去除重复元素

how to remove duplicate elements whem the dict key value is a list

我有以下输出,如何从 'source' 和 'dest' 键值列表中删除重复的 ip,并按所需输出部分所示进行打印。 试过 {{output.msg|unique}} 没用

      {[ {
            "Name": "A",
            "source": [
                "1.1.1.0/24",
                "2.2.2.0/23",
                "3.3.3.0/24",
                "4.4.4.0/23",
                "1.1.1.0/24",
                "2.2.2.0/23",
                "3.3.3.0/24",
                "4.4.4.0/23"
            ],
            "dest": [
                "10.10.10.20/32",
                "10.10.10.20/32",
                "10.10.10.20/32",
                "10.10.10.20/32",
                "10.10.10.21/32",
                "10.10.10.21/32",
                "10.10.10.21/32",
                "10.10.10.21/32"
            ],
        },
        {
            "Name": "B",
            "source": [
                "1.1.1.0/24",
                "2.2.2.0/23",
                "3.3.3.0/24",
                "4.4.4.0/23",
                "1.1.1.0/24",
                "2.2.2.0/23",
                "3.3.3.0/24",
                "4.4.4.0/23"
            ],
            "dest": [
                "20.20.20.233/32",
                "20.20.20.233/32",
                "20.20.20.233/32",
                "20.20.20.233/32",
                "20.20.20.234/32",
                "20.20.20.234/32",
                "20.20.20.234/32",
                "20.20.20.234/32"
            ],
        },
        {
            "Name": "C",
            "source": [
                "1.1.1.0/24",
                "2.2.2.0/23",
                "3.3.3.0/24",
                "4.4.4.0/23"
            ],
            "dest": [
                "30.30.30.78/32",
                "30.30.30.78/32",
                "30.30.30.78/32",
                "30.30.30.78/32"
            ],
        }
        ]}

期望的输出:

      {[ {
            "Name": "A",
            "source": [
                "1.1.1.0/24",
                "2.2.2.0/23",
                "3.3.3.0/24",
                "4.4.4.0/23",

            ],
            "dest": [
                "10.10.10.20/32",
                "10.10.10.21/32",
            ],
        },
        {
            "Name": "B",
            "source": [
                "1.1.1.0/24",
                "2.2.2.0/23",
                "3.3.3.0/24",
                "4.4.4.0/23",
            ],
            "dest": [
                "20.20.20.233/32",
            ],
        },
        {
            "Name": "C",
            "source": [
                "1.1.1.0/24",
                "2.2.2.0/23",
                "3.3.3.0/24",
                "4.4.4.0/23"
            ],
            "dest": [
                "30.30.30.78/32",
            ],
        }
        ]}

让我们稍微简化一下数据,例如

  output:
    - Name: A
      source: [a, b, c, a, b, c]
      dest: [x, y, z, x, y, z]
    - Name: B
      source: [a, b, c, a, b, c]
      dest: [x, y, z, x, y, z]

迭代列表并过滤项目,例如

  - set_fact:
      out: "{{ out|d([]) + [{'Name': item.Name,
                             'source': _src,
                             'dest': _dst}] }}"
    loop: "{{ output }}"
    vars:
      _src: "{{ item.source|unique }}"
      _dst: "{{ item.dest|unique }}"

给予

  out:
    - Name: A
      dest: [x, y, z]
      source: [a, b, c]
    - Name: B
      dest: [x, y, z]
      source: [a, b, c]