更新字典对象中的值

时间:2013-01-26 23:45:06

标签: python dictionary

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

1 个答案:

答案 0 :(得分:1)

tef_dict变量未保存到实例,并且未返回。在set_t_e_f()添加一行:

return tef_dict

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

使用collections.Counter()代替你可能会更好。与defaultdict不同,它会为缺失的键返回零,但不会将它们添加到基础字典中。