d = {}
x = []
l=[1,1,1,2,3,3,5,5]
def count(lst,r):
z = 0
for i in lst:
if i==r:
z+=1
return z
print(count(l,1))
def conv_to_dict(lst):
d={}
d={x:count(lst,i) for i in set(lst)}
print(conv_to_dict(l))
错误如下: 我想将列表转换成字典,其中值是其键出现在列表中的次数
<ipython-input-32-a4e2a975b11c> in <dictcomp>(.0)
13 d={}
14 print(count(lst,lst[4]))
---> 15 d={x:count(lst,i) for i in set(lst)}
16
17 print(conv_to_dict(l))
TypeError: unhashable type: 'list'
答案 0 :(得分:1)
由于使用x
(在调用者的作用域中定义为空列表)作为键,因此出现此错误。列表不能用作字典键,因为列表是可变的,并且键必须是不可变的。但是,除此之外,您不希望列表成为键(当然不是x
只是一个空列表),而是您要计算的特定项目,即i
一个更简单的解决方案是使用Counter
类:
>>> from collections import Counter
>>> Counter(l)
Counter({1: 3, 3: 2, 5: 2, 2: 1})
答案 1 :(得分:0)
变量x
属于列表类型,不能用作字典键。您可能以i
变量为键:
l=[1,1,1,2,3,3,5,5]
def count(lst,r):
z = 0
for i in lst:
if i==r:
z+=1
return z
def conv_to_dict(lst):
d={i:count(lst,i) for i in set(lst)}
return d
print(conv_to_dict(l))
打印:
{1: 3, 2: 1, 3: 2, 5: 2}
注意:如{Samwise的回答所述,有collections.Counter