TypeError:第一个参数必须是callab

2024-06-17 13:21:39 发布

您现在位置:Python中文网/ 问答频道 /正文

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)

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


Tags: intxtnewfordata错误lineopen
2条回答

defaultdict的第一个参数必须可调用。您传递了一个无法调用的list实例。您希望传递“list”类型。

典型用法如下:

d = defaultdict(list)
for k, v in something:
    d[k].append(v)

基于您在评论中提供的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']})

I want to store duplicate keys in dictionary

这根本不可能。字典中的键是唯一的。我想你想要的是:

d = defaultdict(list)
with codecs.open('grammar_new.txt', encoding='utf-8') as f:
   for line in f:
      if len(line.rstrip()):
          key,value = line.rstrip().split()
          d[key].append(value)

print(d)

现在d将为每个键包含一个包含相应值的列表。每个键必须是唯一的,但它可以有任意数量的值,这些值可以是重复的。

相关问题 更多 >