python 从列表中删除重复字典
我有一个字典的列表
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)]
首先,我把最开始的字典转换成一个元组的列表,然后把这些元组放进一个集合里(集合会自动去掉重复的条目),最后再把它们转换回字典。