从lis中的嵌套词典中删除重复项

2024-09-29 08:24:11 发布

您现在位置:Python中文网/ 问答频道 /正文

快速和非常基本的新手问题。在

如果我的字典列表是这样的:

L = []
L.append({"value1": value1, "value2": value2, "value3": value3, "value4": value4})

假设存在多个条目,其中value3和value4与其他嵌套字典相同。我怎样才能快速方便地找到并删除那些重复的词典呢。在

维持秩序并不重要。在

谢谢。在

编辑:

如果有五个输入,如下所示:

^{pr2}$

输出应如下所示:

L = [{"value1": fssd, "value2": dsfds, "value3": abcd, "value4": gk},
    {"value1": asdasd, "value2": asdas, "value3": dafdd, "value4": sdfsdf},
    {"value1": asdasd, "value2": dskksks, "value3": ldlsld, "value4": sdlsld}

Tags: 编辑列表字典条目词典value1append新手
3条回答

有一种方法:

keyfunc = lambda d: (d['value3'], d['value4'])

from itertools import groupby
giter = groupby(sorted(L, key=keyfunc), keyfunc)

L2 = [g[1].next() for g in giter]
print L2

在Python 2.6或3中。*:

import itertools
import pprint

L = [{"value1": "fssd", "value2": "dsfds", "value3": "abcd", "value4": "gk"},
    {"value1": "asdasd", "value2": "asdas", "value3": "dafdd", "value4": "sdfsdf"},
    {"value1": "sdfsf", "value2": "sdfsdf", "value3": "abcd", "value4": "gk"},
    {"value1": "asddas", "value2": "asdsa", "value3": "abcd", "value4": "gk"},
    {"value1": "asdasd", "value2": "dskksks", "value3": "ldlsld", "value4": "sdlsld"}]

getvals = operator.itemgetter('value3', 'value4')

L.sort(key=getvals)

result = []
for k, g in itertools.groupby(L, getvals):
    result.append(g.next())

L[:] = result
pprint.pprint(L)

在python2.5中几乎相同,只是在append中必须使用g.next()而不是next(g)。在

您可以使用临时数组来存储项dict。前面的代码在for循环中删除项时出错。在

(v,r) = ([],[])
for i in l:
    if ('value4', i['value4']) not in v and ('value3', i['value3']) not in v:
        r.append(i)
    v.extend(i.items())
l = r

你的测试:

^{pr2}$

输出

{'value4': 'gk', 'value3': 'abcd', 'value2': 'dsfds', 'value1': 'fssd'}
{'value4': 'sdfsdf', 'value3': 'dafdd', 'value2': 'asdas', 'value1': 'asdasd'}
{'value4': 'sdlsld', 'value3': 'ldlsld', 'value2': 'dskksks', 'value1': 'asdasd'}

相关问题 更多 >