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]
我有以下输出,如何从 '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]