我要编写一个函数,而不是逐行编写代码,但是看起来不起作用。
这段代码效果很好:
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)
运行功能时,它说我拥有
不可散列的类型:“列表”
请问为什么?重新设计功能的任何提示吗?
答案 0 :(得分:0)
list
不能用作key
中的dictionary
,因为它不可散列。您可以改用tuple
。
答案 1 :(得分:0)
可变对象是不可哈希的,因为它们的哈希值会随着修改而改变,因此查找将失败。切换为不可变类型,例如使用json.dumps(somelist)
的字符串或类似tuple(somelist)
的元组