は、私のコードの関連部分である:私はcalculate_TFDIF
メソッドを実行すると、私は後者のみ辞書の値をしたいとき両方のディクショナリの値が更新されるのはなぜですか?ここでは(PythonのOOP)
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)
、両方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}
残念ながら、両方の辞書は、後者のように見えます。
[MCVE]お知らせください。 (または少なくともこれをより読みやすくするために...) –
'for'ループの中で' print() 'を使用して、どの値を取得して設定するかを確認してください。問題を見つけるのに役立ちます。 – furas
どのように辞書を作成しますか?おそらく、同じ辞書を2つの変数に割り当て、両方の変数が同じデータをメモリ内で使用する場合もあります。 2つの分離された辞書を作成するには、 'copy.deepcopy()'を使う必要があります。 [pythontutor.com](http://pythontutor.com/)のコードを実行してPythonがどのようにオブジェクトにメモリを参照するかを見ることができます(pythontutorでコードを実行するときは矢印を参照) – furas