Python - 从复杂对象的有序列表中删除重复项?

标签 python algorithm

我有从 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/

相关文章:

python - 组合两个数据帧中的两列;索引相同但长度不同

python - 在python中旋转图像并去除背景

algorithm - 优化算法以在4秒内运行大量操作

c++ - 在 C++ 的 cmd 中显示 Pascal 的三角形

javascript - 有人可以帮助我使用这种从某些值拆分数组的算法吗?

Java .dat 文件到 Python pickle

python - 具有两种颜色的 Matplotlib 绘图分布

python - 如何在Python中将方法作为属性调用?

c - 不兼容的指针错误,会计代码计算器

algorithm - 在坐标系中寻找相反的方向