【发布时间】:2013-09-10 00:44:12
【问题描述】:
我有一个对象列表,每个对象都有一个 ID。此列表可以包含重复项。如何获得唯一的 id 列表?
【问题讨论】:
我有一个对象列表,每个对象都有一个 ID。此列表可以包含重复项。如何获得唯一的 id 列表?
【问题讨论】:
您可以将 id 作为键添加到字典中并取回它的键:
d = {}
for item in items:
d[item.id] = item
print d.keys()
现在,d.values() 包含具有统一 ID 的项目。只要没有两个不同的项目具有相同的 id,以上就是无损的。
与其他解决方案相比(在撰写本文时),这也提供了 id 和具有指定 id 的项目之间的良好映射。
【讨论】:
假设您想要一个所有 id 的列表,但没有双精度数
all_ids = [x.getId() for x in items]
no_double_ids = list(set(all_ids))
【讨论】:
我认为规范的方式如下:
org_list = [1,2,2,4,1,5,3]
list(set(org_list))
它会重新排序列表,所以如果这是一个问题,你需要另一种方法。另见:
How do you remove duplicates from a list in whilst preserving order? http://www.peterbe.com/plog/uniqifiers-benchmark
【讨论】:
>>> class ObjectIdHolder(object):
... def __init__(self, object_id):
... self.object_id = object_id
...
>>> ids = list(range(10)) * 2
>>> a = [ObjectIdHolder(x) for x in ids]
>>> unique_ids = {obj.object_id for obj in a}
>>> print unique_ids
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
【讨论】: