不可散列的类型:“ list”在函数中,但在函数外部运行良好

时间:2019-03-25 18:25:07

标签: python python-3.x

我要编写一个函数,而不是逐行编写代码,但是看起来不起作用。

这段代码效果很好:

function foo() {
  return true;
} 


var [a] = foo() ; // Uncaught TypeError: foo is not a function or its return value is not iterable
var [a] = foo() || []; // Uncaught TypeError: foo is not a function

但是当我将其编写为函数时,我使用 def gdp_fdi(odf, colname): tempo = odf[odf['id'].str.contains(temp, na=False)] df = tempo[['id',colname]] return df def sortdf(df): df['id'] = pd.Categorical(df.id, categories = top20code, ordered = True) df.sort_values(by='id') return df <THIS PART> top20 =fdi.sort_values('fdi_1987',ascending = False).groupby('fdi_1987').head(2) top20 = top20[['fdi_1987','id']].head(21) top20code = top20['id'] top20code = top20code.to_string(index=False) top20code = top20code.split() temp = '|'.join(top20code) top20_name=gdp_fdi(wb,'name') top20_region=gdp_fdi(wb,'region') top20_gdp=gdp_fdi(gdp,'gdp_1987') sort20gdp=sortdf(top20_gdp) sort20region=sortdf(top20_region) sort20name=sortdf(top20_name) from functools import reduce lists=[sort20gdp,sort20region,sort20name] df = reduce(lambda df1, df2: pd.merge(left=df1, right=df2, on=["id"], how="inner"), lists) df['id'] = pd.Categorical(df.id, categories = top20code, ordered = True) df.sort_values(by='id') raw=df.sort_values(by='id') raw </THIS PART> 而不是'fdi_'+str(year)并将'fdi_1987'写为名为<THIS PART>的函数。

但是当我用top20(year)运行功能时,它说我拥有

  

不可散列的类型:“列表”

请问为什么?重新设计功能的任何提示吗?

2 个答案:

答案 0 :(得分:0)

list不能用作key中的dictionary,因为它不可散列。您可以改用tuple

答案 1 :(得分:0)

可变对象是不可哈希的,因为它们的哈希值会随着修改而改变,因此查找将失败。切换为不可变类型,例如使用json.dumps(somelist)的字符串或类似tuple(somelist)的元组