Remova itens duplicados no dicionário
-
06-07-2019 - |
Pergunta
Estou tentando remover itens duplicados em uma lista através de um dicionário:
def RemoveDuplicates(list):
d = dict()
for i in xrange(0, len(list)):
dict[list[i]] = 1 <------- error here
return d.keys()
Mas está me levantando o seguinte erro:
TypeError: 'type' object does not support item assignment
Qual é o problema?
Solução
Você deveria ter escrito:
d[list[i]] = 1
Mas por que não fazer isso?
def RemoveDuplicates(l):
return list(set(l))
Além disso, não use nomes de funções internos como nomes de variáveis. Pode levar a bugs confusos.
Outras dicas
Além do que os outros disseram, é não patônico fazer isso:
for i in xrange(0, len(lst)):
do stuff with lst[i]
Quando você pode fazer isso em vez disso:
for item in lst:
do stuff with item
dict é do tipo, você quer dizer d[list[i]] = 1
.
Adição: isso aponta o erro real em seu código. Mas as respostas fornecidas por outras pessoas fornecem melhor maneira de alcançar o que você está buscando.
def remove_duplicates(myList):
return list (set(myList))
Ao olhar para o seu código, parece que você não se incomoda com a ordem dos elementos e preocupado apenas com a singularidade. Nesse caso, um conjunto () pode ser uma melhor estrutura de dados.
O problema em seu código é apenas usar um nome de argumento de função que não é o nome da lista de tipos internos e, posteriormente, no tipo ditado na expressão dict[list[i]]
.
Observe isso usando list(set(seq))
provavelmente mudará a ordem dos itens restantes. Se a retenção deles é importante, você precisa fazer uma cópia da lista:
items = set()
copy = []
for item in seq:
if not item in items:
copy.add(item)
items.append(item)
seq = copy