我的程序有class Words
,其中defaultdict(int)
名为t_e_f
被创建为对象,函数main()
包含指向使用值的函数的指针字典' t_e_f'计算其他计算。 ' t_e_f'是一个字典,具有单词元组的键和值浮点数。
我的程序看起来像这样:
class Words:
def __init__(init):
self.t_e_f=Words.set_t_e_f(self)
def set_t_e_f(self):
raw_text_e=open_file('toyen')
raw_text_f=open_file('toyde')
tokens_e=raw_text_e.split()
tokens_f=raw_text_f.split()+['NULL']
tef_dict=collections.defaultdict(int)
for word_e in tokens_e_set:
for word_f in tokens_f_set:
tef_dict[(word_e,word_f)]=1/len(tokens_e_set)
return tef_dict
def get_t_e_f(self):
return self.t_e_f
def main():
words=Words()
t_e_f=words.get_t_e_f()
s_total_e=normalization(t_e_f)
然后我有一个normalization
函数,它接受t_e_f
并使用它来计算在规范化函数s_total_e
中创建的另一个字典的值的计算。
def normalization(t_e_f):
s_total_e=collections.defaultdict(int)
words_sent_e=['the','big','book']
words_sent_de=['das','grosse','buch']
for item in words_sent_e:
s_total_e[item]
for item in words_sent_e:
for item_2 in words_sent_de:
s_total_e[item]+=t_e_f[(item,item_2)]
问题在于,当t_e_f
传递给规范化时,所有值都设置为0,因此在创建单词对象时丢失设置的初始值。我想知道发生了什么以及如何解决这个问题。
谢谢。
答案 0 :(得分:1)
tef_dict
变量未保存到实例,并且未返回。在set_t_e_f()
添加一行:
return tef_dict
另请注意,即使您只查找或检查丢失的密钥, defaultdict 也会自动添加零条目。
使用collections.Counter()
代替你可能会更好。与defaultdict不同,它会为缺失的键返回零,但不会将它们添加到基础字典中。