Rimuovi elementi duplicati nel dizionario
-
06-07-2019 - |
Domanda
Sto cercando di rimuovere elementi duplicati in un elenco tramite un dizionario:
def RemoveDuplicates(list):
d = dict()
for i in xrange(0, len(list)):
dict[list[i]] = 1 <------- error here
return d.keys()
Ma mi sta sollevando il seguente errore:
TypeError: 'type' object does not support item assignment
Qual è il problema?
Soluzione
Avresti dovuto scrivere:
d[list[i]] = 1
Ma perché non farlo?
def RemoveDuplicates(l):
return list(set(l))
Inoltre, non utilizzare i nomi delle funzioni integrate come nomi di variabili. Può portare a confondere i bug.
Altri suggerimenti
Oltre a ciò che altri hanno detto, non è ritmico farlo:
for i in xrange(0, len(lst)):
do stuff with lst[i]
quando invece puoi farlo:
for item in lst:
do stuff with item
dict è il tipo, intendi d [list [i]] = 1
.
Aggiunta: indica l'errore effettivo nel codice. Ma le risposte fornite da altri forniscono un modo migliore per raggiungere ciò a cui stai mirando.
def remove_duplicates(myList):
return list (set(myList))
Guardando il tuo codice sembra che non ti preoccupi dell'ordinamento degli elementi e ti preoccupi solo dell'unicità. In tal caso, un set () potrebbe essere una struttura dati migliore.
Il problema nel tuo codice è solo quello di usare un nome di argomento della funzione che non sia il nome dell'elenco dei tipi incorporato e in seguito il tipo dict nell'espressione dict [list [i]]
.
Nota che l'uso dell'elenco (set (seq))
probabilmente cambierà l'ordine degli articoli rimanenti. Se è importante conservare il loro ordine, è necessario effettuare una copia dell'elenco:
items = set()
copy = []
for item in seq:
if not item in items:
copy.add(item)
items.append(item)
seq = copy