Python中字典值转列表全局运行正常,放入函数报list不可调用错误
错误原因
该报错是因为你把test函数的参数命名为了list,直接覆盖了Python内置的list()列表构造函数的作用域:
- 在
test函数内部,list不再指代用来创建列表的内置可调用对象,而是指向你传入的列表参数 - 执行
return list(v)时,代码尝试把一个列表实例当作函数调用,自然就抛出了'list' object is not callable的类型错误。
额外注意:你当前代码中循环for i in l直接引用了全局变量l,没有使用传入的参数,属于不规范写法,存在逻辑隐患。
修复方案
- 修改函数参数名,不要和Python内置标识符(比如
list、dict、str这类内置类型/函数名)重名,比如改为input_list - 同步修改循环逻辑,改为遍历传入的参数,避免依赖全局变量
修复后的完整代码如下:
def test(input_list): result = {} for i in input_list: result[i] = result.get(i, 0) + 1 v = result.values() return list(v) l = [1,2,1,1,3,3,5,5,5,5,5,3,7] print(test(l))
运行后将输出字典值对应的列表(Python3.7+版本输出顺序为[3, 3, 5, 1],低版本Python字典不保留插入顺序,输出顺序可能不同)。
内容的提问来源于stack exchange,提问作者shuanga
相关产品推荐
相关产品推荐

