![](/img/trans.png)
[英]Python3: TypeError: unhashable type: 'list' when using Counter
[英]TypeError: unhashable type: 'list using Counter
由于 Counter apply to a dict,我遇到了一个错误。 我的字典看起来像这样
{'Dan': [nan,
nan,
'No results',
'No results',
1,
1,
'Dan_final.csv',
1.0],
'Matt': ['Greg',
2.9,
'No results',
'No results',
1,
1,
'Matt_final.csv',
1.0]}
它是从 dataframe 创建的:
df_dict=df.set_index('n1').T.to_dict('list')
我正在尝试使用以下代码:
def frequency(EYES):
Eyes_freq_dict = Counter(EYES.values())
return Eyes_freq_dict
EYEScounter = frequency(df_dict)
EYESlist = list(EYEScounter.values())
错误是TypeError: unhashable type: 'list'
我尝试使用Counter(map(tuple(EYES.values())))
但它没有用。 你知道我该如何解决这个错误吗? 正如我上面提到的问题,我需要频率来获得同质性 function 的机会。
那个数据结构... {'Dan': [nan,[...] 但是列表不能是字典的键,而 Counter 就是这样做的。 所以将它们(如果你不修改它们)更改为元组......
>>> Counter([ 1,2,3,1,2,1])
Counter({1: 3, 2: 2, 3: 1})
>>> Counter([ [],1,2,3,1,2,1]) # [] can't be a key
TypeError: unhashable type: 'list'
>>> Counter([ (),1,2,3,1,2,1]) # but () is ok
Counter({1: 3, 2: 2, (): 1, 3: 1})
所以......你可以将这些列表转换为元组......
Eyes_freq_dict = Counter(EYES.values())
改成
Eyes_freq_dict = Counter([tuple(x) for x in EYES.values()])
这会将值列表中的每个元素更改为元组(可以作为字典的键,这正是 Counter() 试图做的)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.