【问题标题】:python collections.defaultdict() compile errorpython collections.defaultdict() 编译错误
【发布时间】:2011-08-15 20:17:04
【问题描述】:

以下代码,足够简单明了,编译时会报错:

import string
import collections

#create dictionary with alphabets as keys, and empty values
list = ['aema', 'airplane', 'amend']

gen_dict = dict.fromkeys(string.ascii_lowercase, '')

gen_dict = collections.defaultdict(list)

for x in list:
    gen_dict['a'].append(x)

产生的错误是:

Traceback (most recent call last):
  File "indexdict.py", line 14, in <module>
    gen_dict = collections.defaultdict(list)
TypeError: first argument must be callable

有什么想法吗? 在此先感谢

【问题讨论】:

    标签: python dictionary defaultdict


    【解决方案1】:

    您用上面的list = ['aema', 'airplane', 'amend'] 覆盖了作为类型名称的内部list。将您的 list 重命名为例如keyskeylist 一切都会好起来的。

    所以替换

    list = ['aema', 'airplane', 'amend']
    

    keys = ['aema', 'airplane', 'amend']
    

    for x in list:
    

    for x in keys:
    

    【讨论】:

    • @Manny - 这绝对是正确的答案。 OP 已在本地范围内重新分配 list,这会产生错误。 OP 需要使用类似 myListkeylist 或类似的东西。到 collections.defaultdict 的调用发生时,list 不再是一个函数。
    • @Manny:不,它需要一个可调用的。 OP 想要使用不再可用的内置 list
    • 是的,我的错误,我误解了这里发生的事情。
    • @glglgl 我尝试了上述将列表重命名为键的调整,我必须说错误仍然存​​在。现在就是这样: Traceback(最近一次调用最后一次):文件“indexdict.py”,第 14 行,在 gen_dict = collections.defaultdict(keys) TypeError: first argument must be callable
    • @sys_debug 这是我假设 glglgl 所建议的(只需替换 all 列表的实例,包括 defaultdict 调用,所以你不要重新定义它),但我的假设错了。您必须传递实际的 list 函数,而不是列表实例。所以正确的调用是collections.defaultdict(list),假设你没有重新定义list
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-03
    • 2016-05-21
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    相关资源
    最近更新 更多