Удалить дубликаты в словаре - PullRequest
1 голос
/ 28 ноября 2009

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

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

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

Ответы [ 5 ]

11 голосов
/ 28 ноября 2009

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

d[list[i]] = 1

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

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

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

4 голосов
/ 28 ноября 2009

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

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

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

for item in lst:
    do stuff with item
3 голосов
/ 28 ноября 2009
def remove_duplicates(myList):
    return list (set(myList))

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

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

3 голосов
/ 28 ноября 2009

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

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

0 голосов
/ 28 ноября 2009

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

items = set()
copy = []
for item in seq:
    if not item in items:
        copy.add(item)
        items.append(item)
seq = copy
...