TypeError:第一个参数必须是可调用的

Dha*_*nya -1 python defaultdict

fs = codecs.open('grammar_new.txt', encoding='utf-8')
unidata=[]
d={}
fr=codecs.open('rule.txt', 'w')
for line in fs:
    line_data=line.split()
    for i in range(0,len(line_data)):
       unidata.append(line_data[i])


d = defaultdict(unidata)
Run Code Online (Sandbox Code Playgroud)

执行此代码将生成错误,因为d = defaultdict(unidata)TypeError:第一个参数必须是可调用的..我想在字典中存储重复的键

mgi*_*son 6

第一个参数defaultdict必须是可调用的.您传递的实例list不可调用.您想要传递'list'类型.

典型用途如下:

d = defaultdict(list)
for k, v in something:
    d[k].append(v)
Run Code Online (Sandbox Code Playgroud)

根据unidata您在评论中提供的内容,我认为您希望:

>>> from collections import defaultdict
>>> unidata = [[u'NP--->', u'N_NNP'], [u'NP--->', u'N_NN_S_NU'], [u'NP--->', u'N_NNP'], [u'NP--->', u'N_NNP'], [u'VGF--->', u'V_VM_VF'], [u'NP--->', u'N_NN']]
>>> d = defaultdict(list)
>>> for k, v in unidata:
...     d[k].append(v)
... 
>>> d
defaultdict(<type 'list'>, {u'VGF--->': [u'V_VM_VF'], u'NP--->': [u'N_NNP', u'N_NN_S_NU', u'N_NNP', u'N_NNP', u'N_NN']})
Run Code Online (Sandbox Code Playgroud)