2010-04-02 17 views
5

digamos que tengo una lista¿Cómo controlo la eficacia de los elementos únicos en una lista?

li = [{'q':'apple','code':'2B'}, 
     {'q':'orange','code':'2A'}, 
     {'q':'plum','code':'2A'}] 

¿Cuál es la forma más eficiente para devolver el recuento de "códigos" únicas en esta lista? En este caso, los códigos únicos son 2, porque solo 2B y 2A son únicos.

Podría poner todo en una lista y comparar, pero ¿es esto realmente eficiente?

+2

Duplicado de todos estos: http://stackoverflow.com/search?q=%5Bpython%5D+duplicate+list. Específicamente esto: http://stackoverflow.com/questions/1143379/removing-duplicates-from-list-of-lists-in-python –

Respuesta

8

Probablemente la forma más sencilla más eficaz es la creación de un conjunto de los códigos, que filtrará los únicos, a continuación, obtener el número de elementos en dicho conjunto:

count = len(set(d["code"] for d in li)) 

Como siempre, te aconsejo que no se preocupe acerca de este tipo de eficiencia a menos que hayas medido tu desempeño y hayas visto que es un problema. Por lo general, solo pienso en la claridad del código cuando escribo este tipo de código, y luego vuelvo a ajustarlo solo si tengo un perfil y descubro que I necesita para mejorar el rendimiento.

+0

Sí, el conjunto es lo que estaba buscando. Gracias. – TIMEX

+1

FWIW cuando los sets se introdujeron por primera vez en Python, este fue un concepto novedoso para mí. Me pareció muy útil leer sobre las matemáticas detrás de los conjuntos, lo que lo vincula todo: http://en.wikipedia.org/wiki/Set_(mathematics) – jathanism

+2

Para tomar el único de algún * grupo *, siempre es O (n), ya que has observado cada elemento, a menos que tengas alguna otra información interna. –

Cuestiones relacionadas