Frage

Ich versuche, doppelte Elemente in einer Liste über ein Wörterbuch zu entfernen:

def RemoveDuplicates(list):
    d = dict()

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

    return d.keys()

Aber es erhöht mich den folgenden Fehler:

TypeError: 'type' object does not support item assignment

Was ist das Problem?

War es hilfreich?

Lösung

Sie hätten schreiben sollen:

d[list[i]] = 1

Aber warum nicht das tun?

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

Verwenden Sie auch keine integrierten Funktionsnamen als Variablennamen. Es kann zu verwirrenden Fehlern führen.

Andere Tipps

Zusätzlich zu dem, was andere gesagt haben, ist es unpythonisch, dies zu tun:

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

Wenn Sie dies stattdessen tun können:

for item in lst:
    do stuff with item

DICT ist der Typ, du meinst d[list[i]] = 1.

Addition: Dies weist auf den tatsächlichen Fehler in Ihrem Code hin. Die von anderen bereitgestellten Antworten bieten jedoch eine bessere Möglichkeit, das zu erreichen, was Sie anstreben.

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

Von der Betrachtung Ihres Codes scheint es, dass Sie sich nicht um die Bestellung von Elementen kümmern und nur um die Einzigartigkeit besorgt sind. In einem solchen Fall könnte ein Satz () eine bessere Datenstruktur sein.

Das Problem in Ihrem Code besteht nur darin, einen Funktionsargumentnamen zu verwenden, der nicht der Name der integrierten Typliste und später auf dem Typ DICT im Ausdruck ist dict[list[i]].

Beachten Sie, dass die Verwendung von list(set(seq)) wird wahrscheinlich die Bestellung der verbleibenden Elemente ändern. Wenn die Aufbewahrung ihrer Bestellung wichtig ist, müssen Sie eine Kopie der Liste erstellen:

items = set()
copy = []
for item in seq:
    if not item in items:
        copy.add(item)
        items.append(item)
seq = copy
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top