如何从字典列表中删除重复的字典对象

Kha*_*idi 6 python dictionary list

我想从字典列表中删除重复的字典对象.我不希望dict元素与列表中的另一个dict元素具有相同的'plate'元素.我只想要一次.

datalist = [

{
    'plate': "01",
    'confidence' : "80"
},

{
    'plate': "01",
    'confidence' : "60"
},

{
    'plate': "02",
    'confidence' : "91"
},

{
    'plate': "02",
    'confidence' : "91"
},
]
Run Code Online (Sandbox Code Playgroud)

我的输出应该是这样的:

datalist = [

{
    'plate': "01",
    'confidence' : "80"
},

{
    'plate': "02",
    'confidence' : "91"
},
]
Run Code Online (Sandbox Code Playgroud)

这是我的代码,但我没有得到确切的结果.

def filter(datalist):
    previous = ""
    for data in datalist:
        current  = data['plate']
        if current is previous:
            datalist.remove(data)
        previous = current 

    return datalist

datalist = [

    {
        'plate': "01",
        'confidence' : "80"
    },

    {
        'plate': "01",
        'confidence' : "60"
    },

    {
        'plate': "02",
        'confidence' : "91"
    },

    {
        'plate': "02",
        'confidence' : "91"
    },
]


print (filter(datalist))
Run Code Online (Sandbox Code Playgroud)

这给了我输出:

[

    {
        'plate': "01",
        'confidence' : "80"
    },

    {
        'plate': "02",
        'confidence' : "91"
    },

    {
        'plate': "02",
        'confidence' : "91"
    },
]
Run Code Online (Sandbox Code Playgroud)

这是不期望的,我的代码有什么问题.

Dan*_*ejo 6

如果可以接受来自重复组的任何元素,您可以:

datalist = [
    {'plate': "01", 'confidence': "80"},
    {'plate': "01", 'confidence': "60"},
    {'plate': "02", 'confidence': "91"},
    {'plate': "02", 'confidence': "91"},
]

result = list({ d['plate'] : d for d in datalist }.values())
print(result)
Run Code Online (Sandbox Code Playgroud)

产量

[{'plate': '02', 'confidence': '91'}, {'plate': '01', 'confidence': '60'}]
Run Code Online (Sandbox Code Playgroud)

我们的想法是创建一个字典,其中键是值,plate值是字典本身.如果要保留第一个重复条目,请使用reverse:

result = list({d['plate']: d for d in reversed(datalist)}.values())
Run Code Online (Sandbox Code Playgroud)

产量

[{'plate': '02', 'confidence': '91'}, {'plate': '01', 'confidence': '80'}]
Run Code Online (Sandbox Code Playgroud)

  • @DanielMesejo好!顺便提一下创意答案! (2认同)