我正在尝试通过字典删除列表中的重复项目:
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 :(得分:11)
你应该写:
d[list[i]] = 1
但为什么不这样做?
def RemoveDuplicates(l):
return list(set(l))
另外,不要使用内置函数名作为变量名。它可能导致混乱的错误。
答案 1 :(得分:4)
除了其他人所说的,这样做是不可思议的:
for i in xrange(0, len(lst)):
do stuff with lst[i]
当你可以这样做时:
for item in lst:
do stuff with item
答案 2 :(得分:3)
dict是类型,你的意思是d[list[i]] = 1
。
添加:这指出了代码中的实际错误。但是,其他人提供的答案提供了更好的方法来实现您的目标。
答案 3 :(得分:3)
def remove_duplicates(myList):
return list (set(myList))
通过查看代码,您似乎不会对元素的排序感到困扰,只关心它的唯一性。在这种情况下,set()可能是更好的数据结构。
代码中的问题只是使用函数参数名称,该名称不是内置类型列表的名称,后面是表达式dict[list[i]]
中的类型dict。
答案 4 :(得分:0)
请注意,使用list(set(seq))
可能会更改其余项目的排序。如果保留他们的订单很重要,您需要复制一份清单:
items = set()
copy = []
for item in seq:
if not item in items:
copy.add(item)
items.append(item)
seq = copy