1

我的程序有一个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,因此会丢失创建 words 对象时设置的初始值。我想知道发生了什么以及如何解决这个问题。谢谢你。

4

1 回答 1

1

tef_dict变量没有被保存到实例中并且没有被返回。添加一行到set_t_e_f()

return tef_dict

另请注意,即使您仅查找或检查丢失的键, defaultdict也会自动添加零条目。

改用你可能会更好collections.Counter()。与 defaultdict 不同,它会为丢失的键返回零,但不会将它们添加到底层字典中。

于 2013-01-27T03:22:24.267 回答