List 基于条件的可分解合并列表

List 基于条件的可分解合并列表,list,merge,ansible,List,Merge,Ansible,我有两份清单: list1: - file: f1 perm: '777' - file: f2 perm: '677' - file: f3 perm: '755' - file: f4 perm: '700' 我必须将它们合并到新列表中,如下所示: list3: - file: f1 perm: '777' - file: f2 perm: '677' - file: f3 perm: '755'

我有两份清单:

list1:
  - file: f1
    perm: '777'
  - file: f2
    perm: '677'
  - file: f3
    perm: '755'
  - file: f4
    perm: '700'
我必须将它们合并到新列表中,如下所示:

list3:
  - file: f1
    perm: '777'
  - file: f2
    perm: '677'
  - file: f3
    perm: '755'
    t_perm: '677'
  - file: f4
    perm: '700'
    t_perm: '755'
正常合并由

   - set_fact:
        list3: "{{ (list1 + list2)|
                   groupby('file')|
                   map('last')|
                   map('combine')|
                   list }}"

但我还有一个条件。如果文件存在于列表1中而不存在于列表2中,则合并。如果文件存在于列表2中而不存在于列表1中,则不要合并,忽略它。

为了满足条件,我们需要从列表2中删除列表1中不存在的项目

  • “在列表1中”和“不在列表2中”=>合并
  • “在列表2中”和“不在列表1中”=>不合并
  • 例如,文件列表和get
    my_键
    。使用列表1和列表2中的文件创建
    my\u列表
    ,并将其用于已测试的任务
    set\u fact

    -设置事实:
    列表3:“{(列表1+my_列表)|
    groupby('文件')|
    映射('last')|
    映射('combine')|
    列表}”
    变量:
    my_键:“{list2 | map(attribute='file')|
    相交(列表1 |映射(属性='file'))|
    列表}”
    my_列表:“{{list2 | selectattr('file','in',my_键)|
    列表}”
    -调试:
    变量:列表3
    
    给予

    list3:
    -档案:f1
    烫发:“777”
    -档案:f2
    烫发:“677”
    -档案:f3
    烫发:“755”
    t_perm:'677'
    -档案:f4
    烫发:“700”
    t_perm:'755'
    
    为了满足条件,我们需要从列表2中删除列表1中没有的项

  • “在列表1中”和“不在列表2中”=>合并
  • “在列表2中”和“不在列表1中”=>不合并
  • 例如,文件列表和get
    my_键
    。使用列表1和列表2中的文件创建
    my\u列表
    ,并将其用于已测试的任务
    set\u fact

    -设置事实:
    列表3:“{(列表1+my_列表)|
    groupby('文件')|
    映射('last')|
    映射('combine')|
    列表}”
    变量:
    my_键:“{list2 | map(attribute='file')|
    相交(列表1 |映射(属性='file'))|
    列表}”
    my_列表:“{{list2 | selectattr('file','in',my_键)|
    列表}”
    -调试:
    变量:列表3
    
    给予

    list3:
    -档案:f1
    烫发:“777”
    -档案:f2
    烫发:“677”
    -档案:f3
    烫发:“755”
    t_perm:'677'
    -档案:f4
    烫发:“700”
    t_perm:'755'
    
    我已更新。我已更新。
       - set_fact:
            list3: "{{ (list1 + list2)|
                       groupby('file')|
                       map('last')|
                       map('combine')|
                       list }}"