2009-11-28 4 views
1

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

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 

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

+0

Переменные имена, такие как 'dict' и' list', являются очень плохими идеями. Никогда не вызывайте переменные 'dict',' list', 'tuple',' int', 'float' или что-то в этом роде. Это очень сложно понять, о чем вы говорите. И это может привести к тому, что ваша программа не работает, потому что имя локальной переменной заменило встроенное имя. –

ответ

11

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

d[list[i]] = 1 

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

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

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

3

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

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

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

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

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

4

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

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

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

for item in lst: 
    do stuff with item 
0

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^