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() 试图做的)。
由于 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() 试图做的)。