Вопрос

Я пытаюсь удалить повторяющиеся элементы в списке через словарь:

def RemoveDuplicates(list):
    d = dict()

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

    return d.keys()

Но это вызывает у меня следующую ошибку:

TypeError: 'type' object does not support item assignment

В чем проблема?

Это было полезно?

Решение

Вы должны были написать:

d[list[i]] = 1

Но почему бы не сделать это?

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

Кроме того, не используйте имена встроенных функций в качестве имен переменных. Это может привести к запутанным ошибкам.

Другие советы

В дополнение к тому, что говорили другие, делать это нелепо:

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

когда вы можете сделать это вместо этого:

for item in lst:
    do stuff with item

dict - это тип, вы имеете в виду d [list [i]] = 1 .

Дополнение: это указывает на фактическую ошибку в вашем коде. Но ответы, предоставленные другими, обеспечивают лучший способ достичь того, к чему вы стремитесь.

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

Из вашего кода видно, что вас не беспокоит порядок элементов и вас интересует только уникальность. В таком случае set () может быть лучшей структурой данных.

Проблема в вашем коде состоит в том, чтобы просто использовать имя аргумента функции, которое не является именем встроенного списка типов, а затем - тип dict в выражении dict [list [i]] .

Обратите внимание, что использование list (set (seq)) , скорее всего, изменит порядок оставшихся элементов. Если важно сохранить их порядок, вам нужно сделать копию списка:

items = set()
copy = []
for item in seq:
    if not item in items:
        copy.add(item)
        items.append(item)
seq = copy
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top