TypeError: unhashable type: 'list using Counter

TypeError: unhashable type: 'list using Counter

由于 Counter 应用于 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]}

它是从数据框创建的:

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())

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

的函数

错误是TypeError: unhashable type: 'list' 我试过使用 Counter(map(tuple(EYES.values()))) 但没有用。 你知道我该如何解决这个错误吗? 我需要频率来获得机会同质函数,就像我上面提到的问题一样。

那个数据结构... {'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() 试图做的)。