2010-04-02 14 views
5

diciamo che ho una listaCome faccio a controllare in modo più efficiente gli elementi univoci in un elenco?

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

Qual è il modo più efficace per restituire il conteggio dei "codici" unici in questa lista? In questo caso, i codici univoci sono 2, perché solo 2B e 2A sono unici.

Potrei mettere tutto in una lista e confrontare, ma è davvero efficiente?

+2

Duplicato di tutti questi: http://stackoverflow.com/search?q=%5Bpython%5D+duplicate+list. In particolare questo: http://stackoverflow.com/questions/1143379/removing-duplicates-from-list-of-lists-in-python –

risposta

8

Probabilmente il modo più semplice più efficace è quello di creare un insieme di codici, che filtrerà unici, quindi ottenere il numero di elementi in quel set:

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

Come sempre, vi consiglio di non preoccuparsi su questo tipo di efficienza se non hai misurato le tue prestazioni e visto che è un problema. Di solito penso solo alla chiarezza del codice quando scrivo questo tipo di codice e poi ritorna e lo stringo solo se ho profilato e ho trovato che ho necessario per migliorare le prestazioni.

+0

Sì, impostare è quello che stavo cercando. Grazie. – TIMEX

+1

FWIW quando i set sono stati introdotti per la prima volta in Python questo era un concetto nuovo per me. Ho trovato molto utile leggere la matematica dietro i set, che lega tutto insieme: http://en.wikipedia.org/wiki/Set_(mathematics) – jathanism

+2

Per prendere l'unicità di qualche * gruppo *, è sempre O (n), dato che hai guardato ogni elemento, a meno che tu non abbia altre informazioni interne. –

Problemi correlati