【发布时间】:2016-10-03 12:04:32
【问题描述】:
我一直在寻找类似 @987654323@ 的方法来删除列表中的重复数据,但原始列表中的项目不可散列(它们是 dicts)。
我花了一段时间寻找合适的东西,最后我写了这个小函数:
def deduplicate_list(lst, key):
output = []
keys = []
for i in lst:
if not i[key] in keys:
output.append(i)
keys.append(i[key])
return output
如果key 被正确给出并且是string,这个函数就可以很好地完成它的工作。不用说,如果我了解允许相同功能的内置或标准库模块,我会很乐意放弃我的小例程,转而选择更标准和更强大的选择。
你知道这样的实现吗?
--注意
[dict(t) for t in set([tuple(d.items()) for d in l])]
虽然很聪明,但不会工作,因为我必须使用嵌套的 dicts 的项目。
-- 例子
为清楚起见,下面是使用此类例程的示例:
with_duplicates = [
{
"type": "users",
"attributes": {
"first-name": "John",
"email": "john.smith@gmail.com",
"last-name": "Smith",
"handle": "jsmith"
},
"id": "1234"
},
{
"type": "users",
"attributes": {
"first-name": "John",
"email": "john.smith@gmail.com",
"last-name": "Smith",
"handle": "jsmith"
},
"id": "1234"
}
]
without_duplicates = deduplicate_list(with_duplicates, key='id')
【问题讨论】:
-
您能否在您的列表中提供
deduplicate_list的电话示例? (我看不清楚它是做什么的):) -
你不应该传递一个键列表吗?
-
查看this 的答案 - 它可能会帮助您散列列表中的元素
-
@AlexisClarembeau 完成
-
dict([(x[key],x) for x in with_duplicates]).values()
标签: python python-3.x duplicates