我有从 json 生成的数百万个字典的列表,格式如下:
{
"_id":XXX,
"some_other":"fields",
...
}
列表需要通过 _id
键进行安全排序,但是有些字典具有重复的 _id
。与列表的大小(最多大约 10-100)相比,重复项确实很少。我只想为每个重复的 _id
使用第一个(或最后一个,只要它是确定性的)字典。在 JavaScript 中,我会使用以下内容:
list.sort((a,b)=>a._id>b._id?1:(a._id<b._id?-1:0))
.filter((ent,i,arr)=>i==0||ent!=arr[i-1])
但是我猜过滤器的 python 变体不允许访问项目的索引?在 Python 中有没有类似的简短方法来完成这样的事情?我发现 sorted(...)
函数允许我按照我想要的方式对这个列表进行排序,但是我仍然不知道如何过滤掉后面的重复项(没有明显的、粗暴的 for 循环)。
最佳答案
使用字典删除重复项(这将始终保留每个 _id 的最后一次出现):
d = {i['_id']: i for i in your_list}
然后按 _id 对其值进行排序:
list(sorted(d.values(), key=lambda i: i['_id']))
关于Python - 从复杂对象的有序列表中删除重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47997722/