【问题标题】:python remove duplicate dictionaries from a list [duplicate]python从列表中删除重复的字典[重复]
【发布时间】:2011-10-28 18:41:14
【问题描述】:

我有一个字典列表

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

我如何删除重复项,即{'firstname': 'joe', 'surname': 'bloggs'} 出现两次所以只希望它出现一次?

【问题讨论】:

  • 你已经尝试过什么?我们不是来给你代码的。
  • 实际上,我在 Google 中查找了一些非常简单的问题,我知道这些问题可以在 Python 中轻松完成。 StackOverflow 在我的帮助中绝对提供了“只是代码”,这正是我真正需要的。

标签: python


【解决方案1】:

这样的事情应该做的事情:

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

首先,我将初始字典转换为一个元组列表,然后将它们放入一个集合(删除重复条目),然后返回一个字典。

【讨论】:

  • 去掉set 调用中的括号——你想要的是生成器表达式,而不是列表理解。否则,很好。
  • @agf :谢谢,我必须改掉这个坏习惯;)
  • 如果我想使用总共 10 列中的两列,该怎么做?
【解决方案2】:
import itertools

import operator

from operator import itemgetter

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(g.next())

l[:] = result

pprint.pprint(l)

【讨论】:

  • 如果您想要对特定字段进行重复数据删除,并且不想对字典中存在的所有字段进行重复数据删除,这是一个不错的解决方案。
猜你喜欢
  • 1970-01-01
  • 2022-11-27
  • 2016-03-14
  • 2020-03-03
  • 1970-01-01
  • 2019-01-09
  • 2013-09-01
  • 2023-01-08
  • 2017-08-13
相关资源
最近更新 更多