Удалить дубликаты в словаре
-
06-07-2019 - |
Вопрос
Я пытаюсь удалить повторяющиеся элементы в списке через словарь:
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