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

问题是什么?

4

5 回答 5

11

你应该写:

d[list[i]] = 1

但为什么不这样做呢?

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

另外,不要使用内置函数名作为变量名。它可能会导致令人困惑的错误。

于 2009-11-28T19:18:15.623 回答
4

除了其他人所说的之外,这样做是不合常规的:

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

当您可以这样做时:

for item in lst:
    do stuff with item
于 2009-11-28T19:31:17.640 回答
3

dict 是类型,你的意思是d[list[i]] = 1.

加法:这指出了代码中的实际错误。但是其他人提供的答案提供了更好的方法来实现您的目标。

于 2009-11-28T19:19:02.347 回答
3
def remove_duplicates(myList):
    return list (set(myList))

从查看您的代码看来,您似乎并不在意元素的顺序,而只关心唯一性。在这种情况下, set() 可能是更好的数据结构。

您的代码中的问题只是使用了一个函数参数名称,它不是内置类型列表的名称,后来在表达式中的类型 dict 上dict[list[i]]

于 2009-11-28T19:20:26.587 回答
0

请注意,使用list(set(seq))可能会更改其余项目的顺序。如果保留他们的订单很重要,您需要制作一份清单副本:

items = set()
copy = []
for item in seq:
    if not item in items:
        copy.add(item)
        items.append(item)
seq = copy
于 2009-11-28T20:14:37.507 回答