如何合并两个列表?

如何合并两个列表?

我有一个使用的任务with_subelements,但是对于大列表来说它太慢了(特别是大多数元素都有重复而且我不需要为它们运行多次)。

所以我正在寻找一种方法来优化它。我希望从该列表中获取所有唯一元素 - 比如settings以下示例:

存货:

my_list:
  - { name: foo, settings: ['x', 'y', 'z'] }      
  - { name: bar, settings: ['x', 'y', 'q', 'w'] }

任务:

- name: get all settings
  set_fact:
    all_settings="{{ my_list|map(attribute='settings')|list }}"

- name: show results
  debug:
    var=all_settings

结果:

"var": {
        "all_settings": [
            [
                "x",
                "y",
                "z"
            ],
            [
                "x",
                "y",
                "q"
                "w"
            ]
        ]
    }

我卡在了这里。我该如何将这些列表合并在一起?

我正在寻找一种方法来['x', 'y', 'z', 'q', 'w']

答案1

您需要使用union

我首先想到的是:

all_settings="{{ foo|map(attribute='settings')|union(bar|map(attribute='settings')) }}"

答案2

那这个呢 ?

- name: get all settings
  set_fact:
    all_settings="{{ my_list|map(attribute='settings')|list|flatten|unique }}"

答案3

看起来这应该可行:

...
all_settings="{{ my_list|map(attribute='settings')|list | sum(start=[]) | unique }}"

相关内容