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) TypeError:第一个参数必须是可调用的。我想在字典中存储重复的键
答案 0 :(得分:5)
defaultdict
的第一个参数必须是 callable 。您已经传递了一个不可调用的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']})
答案 1 :(得分:1)
我想在字典中存储重复的密钥
这根本不可能。词典中的键是唯一的。我想你想要的是:
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
将为每个键包含一个包含相应值的列表。每个键必须是唯一的,但它可以包含任意数量的值,这些值可以是重复的。