Pregunta

Estoy tratando de eliminar elementos duplicados en una lista a través de un diccionario:

def RemoveDuplicates(list):
    d = dict()

    for i in xrange(0, len(list)):
        dict[list[i]] = 1       <------- error here

    return d.keys()

Pero me está provocando el siguiente error:

TypeError: 'type' object does not support item assignment

¿Cuál es el problema?

¿Fue útil?

Solución

Deberías haber escrito:

d[list[i]] = 1

¿Pero por qué no hacer esto?

def RemoveDuplicates(l):
    return list(set(l))

Además, no use nombres de funciones incorporados como nombres de variables. Puede conducir a errores confusos.

Otros consejos

Además de lo que otros han dicho, no es propicio hacer esto:

for i in xrange(0, len(lst)):
    do stuff with lst[i]

cuando puedes hacer esto en su lugar:

for item in lst:
    do stuff with item

dict es el tipo, quiere decir d [list [i]] = 1 .

Adición: Esto señala el error real en su código. Pero las respuestas proporcionadas por otros proporcionan una mejor manera de lograr lo que usted está buscando.

def remove_duplicates(myList):
    return list (set(myList))

Al mirar su código, parece que no le preocupa el orden de los elementos y solo le preocupa la unicidad. En tal caso, un conjunto () podría ser una mejor estructura de datos.

El problema en su código es simplemente usar un nombre de argumento de función que no sea el nombre de la lista de tipos incorporada y luego el tipo dict en la expresión dict [list [i]] .

Tenga en cuenta que el uso de list (set (seq)) probablemente cambiará el orden de los elementos restantes. Si es importante retener su orden, debe hacer una copia de la lista:

items = set()
copy = []
for item in seq:
    if not item in items:
        copy.add(item)
        items.append(item)
seq = copy
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top