繁体   English   中英

TypeError: unhashable 类型: 'list 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())

function 来自Python Soc Network Analysis: Calculating 'Chance Network Homophily' by iterated through a list, using a function

错误是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM