Question

J'essaie de supprimer les éléments en double d'une liste à l'aide d'un dictionnaire:

def RemoveDuplicates(list):
    d = dict()

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

    return d.keys()

Mais cela me pose l'erreur suivante:

TypeError: 'type' object does not support item assignment

Quel est le problème?

Était-ce utile?

La solution

Vous devriez avoir écrit:

d[list[i]] = 1

Mais pourquoi ne pas le faire?

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

De même, n'utilisez pas les noms de fonction intégrés en tant que noms de variable. Cela peut conduire à des bogues déroutants.

Autres conseils

En plus de ce que d'autres ont dit, il est antipythonique de faire ceci:

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

quand vous pouvez le faire à la place:

for item in lst:
    do stuff with item

dict est le type, vous voulez dire d [liste [i]] = 1 .

Addition: Ceci indique l'erreur réelle dans votre code. Mais les réponses fournies par d’autres constituent un meilleur moyen d’atteindre votre objectif.

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

En regardant votre code, il semble que vous ne vous inquiétez pas de l'ordre des éléments et que vous ne soyez préoccupé que par son unicité. Dans un tel cas, un set () pourrait être une meilleure structure de données.

Le problème dans votre code est simplement d'utiliser un nom d'argument de fonction qui n'est pas le nom de la liste de types intégrée et plus tard le type dict dans l'expression dict [liste [i]] .

Notez que l'utilisation de list (set (seq)) modifiera probablement l'ordre des éléments restants. Si le maintien de leur ordre est important, vous devez en faire une copie:

items = set()
copy = []
for item in seq:
    if not item in items:
        copy.add(item)
        items.append(item)
seq = copy
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top