python 从列表中删除重复字典

30 投票
2 回答
29195 浏览
提问于 2025-04-16 23:46

我有一个字典的列表

l = [
{'firstname': 'joe', 'surname': 'bloggs'},
{'firstname': 'john', 'surname': 'smith'},
{'firstname': 'joe', 'surname': 'bloggs'},
{'firstname': 'jane', 'surname': 'bloggs'}
]

我该怎么去掉重复的项,比如说 {'firstname': 'joe', 'surname': 'bloggs'} 出现了两次,我只想让它出现一次呢?

2 个回答

14

在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,但其实大多数情况下,解决方法并不复杂。

比如,有人可能在使用某个库时,发现它的某个功能没有按照预期工作。这时候,我们可以尝试查看文档,看看是否有遗漏的步骤,或者是否需要特别的设置。

另外,很多时候,社区的力量是非常强大的。我们可以在像StackOverflow这样的平台上提问,通常会有很多热心的人愿意帮助我们解答疑惑。

总之,遇到问题时,不要慌张,先查阅资料,看看有没有解决方案。如果还是不行,可以寻求社区的帮助,大家一起解决问题。

import itertools

import operator

import pprint

l = [

{'firstname': 'joe', 'surname': 'bloggs'},

{'firstname': 'john', 'surname': 'smith'},

{'firstname': 'joe', 'surname': 'bloggs'},

{'firstname': 'jane', 'surname': 'bloggs'}

]

getvals = operator.itemgetter('firstname', 'surname')

l.sort(key=getvals)

result = []

for k, g in itertools.groupby(l, getvals):
    result.append(next(g))

l[:] = result

pprint.pprint(l)
67

像这样应该能解决问题:

result = [dict(tupleized) for tupleized in set(tuple(item.items()) for item in l)]

首先,我把最开始的字典转换成一个元组的列表,然后把这些元组放进一个集合里(集合会自动去掉重复的条目),最后再把它们转换回字典。

撰写回答