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?

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top