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?

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top