保留字典列表中的重复字典

问题描述 投票:0回答:1

在我的剧本中,我有一个字典列表。我只想保留重复的字典。

基本上是这样的:

{   
   "l": [
        {
            "a": "d",
            "b": "e",
            "c": "f",
        },
        {
            "a": "ggg",
            "b": "hhh",
            "c": "iii",
        },
        {
            "a": "jjj",
            "b": "kkk",
            "c": "lll",
        },
        {
            "a": "d",
            "b": "e",            
            "c": "f",
        }
        ]
}

我尝试了不同的事情,但在某些时候我意识到我可能是在重新发明轮子。但我找不到任何模块。

list dictionary ansible duplicates
1个回答
0
投票

我想你正在寻找

l | difference(l | unique) | unique

不幸的是,过滤器difference不适用于字典列表。您可以自己编写一个过滤器。例如,

shell > cat filter_plugins/duplicates.py 
def duplicates(l):
    return [i for i in l if l.count(i) > 1]


class FilterModule(object):

    def filters(self):
        return {
            'duplicates': duplicates,
        }

然后,下面的剧本

- hosts: localhost

  vars:

    l:
      - {a: d, b: e, c: f}
      - {a: ggg, b: hhh, c: iii}
      - {a: jjj, b: kkk, c: lll}
      - {a: d, b: e, c: f}

    result: "{{ l | duplicates | unique }}"

  tasks:

    - debug:
        var: result | to_yaml

可能提供您想要的

  result:
    - {a: d, b: e, c: f}
© www.soinside.com 2019 - 2024. All rights reserved.