以下是我的代码的相关部分:
class Document:
def __init__(self):
self.term_frequency_per_document = {}
self.document_frequency = {}
self.term_freq_inv_doc_freq = {}
self.file = None
self.student_list = []
self.index = 0
def calculate_TFIDF(self):
for key in self.term_frequency_per_document:
for value in self.term_frequency_per_document[key]:
self.term_freq_inv_doc_freq[key] = self.term_frequency_per_document.get(key)
for value in self.term_freq_inv_doc_freq[key]:
self.term_freq_inv_doc_freq[key][value] = \
(self.term_freq_inv_doc_freq[key][value]) * \
(math.log(26 / float(self.document_frequency.get(value))))
print (self.term_freq_inv_doc_freq)
print (self.document_frequency)
print (self.term_frequency_per_document)
当我执行calculate_TFDIF
方法时,正在更新self.term_frequency_per_document
和self.term_freq_inv_per_doc
字典的值,而我只想更新后一个字典的值。我知道错误的更新发生在calculate_TFDIF
方法中,但我无法弄清楚原因。
term_frequency_per_document
字典应为:
{'student_1': {'love': 1, 'play': 2, 'watch': 1}, 'student_2': {'favorite': 2, 'hobby': 1}
执行calculate_TFDIF
方法后,term_freq_inv_doc_freq
字典应为:
{'student_1': {'love': 1.6486586255873816, 'play': 2.121743921370525, 'watch': 1.8718021769015913} 'student_2': {'favorite': 1.9110228900548727, 'hobby': 1.1786549963416462}
不幸的是,这两个词典看起来都像后者。
答案 0 :(得分:0)
我怀疑你将相同的字典分配给两个变量,然后两个变量在内存中使用相同的数据。您必须使用copy.deepcopy()创建两个单独的词典。
顺便说一句:您可以在pythontutor.com上运行代码,看看Python如何使用对内存对象的“引用”(当您在pythontutor上运行代码时,请参阅“箭头”)