【问题标题】:Delete duplicates from a list with many Elements [duplicate]从包含许多元素的列表中删除重复项[重复]
【发布时间】:2013-04-16 21:41:18
【问题描述】:

我有一个包含多个元素的列表,我想删除重复的,这里是一个列表示例:

list = [{'status': 'OK', 'mid': '6639'}, {'status': 'OK', 'mid': '6639'}, {'status': 'OK', 'mid': '6640'}, {'status': 'OK', 'mid': '6640'}, {'status': 'OK', 'mid': '6641'}, {'status': 'OK', 'mid': '6641'}, {'status': 'OK', 'mid': '6642'}, {'status': 'OK', 'mid': '6643'}]

我尝试使用函数集,但我有一个错误,它说列表是不可散列的,有人知道如何删除重复项吗?

【问题讨论】:

标签: python python-2.x


【解决方案1】:

你仍然可以使用set(),但是你需要把每个列表变成一个元组;在这里,我们使用键和值的排序元组来准确地查找重复项:

set(tuple(sorted(el.items())) for el in somelist)

要保持列表有序并保持字典完整,您可以使用:

seen = set()
seen_add = seen.add
[x for x in somelist if tuple(sorted(x.items())) not in seen and not seen_add(tuple(sorted(x.items())))]

后者的演示:

>>> seen = set()
>>> seen_add = seen.add
>>> [x for x in somelist if tuple(sorted(x.items())) not in seen and not seen_add(tuple(sorted(x.items())))]
[{'status': 'OK', 'mid': '6639'}, {'status': 'OK', 'mid': '6640'}, {'status': 'OK', 'mid': '6641'}, {'status': 'OK', 'mid': '6642'}, {'status': 'OK', 'mid': '6643'}]

【讨论】:

  • 在不使用 set 函数的情况下,还有其他更快/更简单的解决方案吗??
  • @SkivlageLatif:你必须以某种方式检测重复,而集合是最有效的方法。
  • 好的,谢谢您的宝贵时间
猜你喜欢
  • 1970-01-01
  • 2015-01-05
  • 1970-01-01
  • 2012-09-09
  • 2011-03-25
  • 2020-01-19
  • 2012-05-09
  • 1970-01-01
相关资源
最近更新 更多