Obtenga una lista única de ID de la lista de objetos

Tengo una lista de objetos, cada uno con una identificación. Esta lista puede contener duplicados. ¿Cómo puedo obtener una lista única de ID?

preguntado el 10 de septiembre de 13 a las 01:09

4 Respuestas

Puede agregar las identificaciones como claves a un diccionario y recuperar las claves:

d = {}
for item in items:
    d[item.id] = item
print d.keys()

Ahora, d.values() contiene los elementos que tienen los identificadores unificados. Siempre que no haya dos elementos diferentes que tengan la misma identificación, lo anterior no tiene pérdidas.

En contraste con otras soluciones (en el momento de escribir esto), esto también proporciona una buena asignación entre la identificación y el artículo con la identificación especificada.

Respondido el 10 de Septiembre de 13 a las 11:09

suponiendo que desea una lista de todas las identificaciones pero sin dobles

all_ids = [x.getId() for x in items]
no_double_ids = list(set(all_ids))

Respondido el 10 de Septiembre de 13 a las 02:09

Creo que la forma canónica es la siguiente:

org_list = [1,2,2,4,1,5,3]
list(set(org_list))

reordena la lista, por lo que si eso es un problema, necesita otro método. Ver también:

¿Cómo se eliminan los duplicados de una lista mientras se conserva el orden? http://www.peterbe.com/plog/uniqifiers-benchmark

contestado el 23 de mayo de 17 a las 12:05

Eso solo me da una lista desduplicada de objetos, no las identificaciones. - Marcos Richman

ah lo siento, leí mal. básicamente haría lo que hace windwarrior en su respuesta entonces... - Carro

>>> 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])

Respondido el 10 de Septiembre de 13 a las 02:09

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.