将值从字典转换为矩阵

问题描述 投票:2回答:2

我已经计算了单词在文本文档中出现的次数,并将这些值放入字典中。现在,我想将这些金额添加到一个矩阵,该矩阵由文本文件作为列,不同的词作为行。这是字典的输出:

{'test1.txt': {'peer': 1, 'appel': 1, 'moes': 1}, 
'test2.txt': {'peer': 1, 'appel': 1}, 
'test3.txt': {'peer': 1, 'moes': 2}, 
'test4.txt': {'peer': 1, 'moes': 1, 'ananas': 1}}

并且矩阵的输出必须看起来像这样:

[['', 'test1.txt', 'test2.txt', 'test3.txt', 'test4.txt'],
['moes', 1, 0, 2, 1],
['appel', 1, 1, 0, 0],
['peer', 1, 1, 1, 1],
['ananas', 0, 0, 0, 1]]

这是我现在要打印矩阵的代码,但是尚未实现单词在每个文档中出现的次数。

term_freq_matrix = []

list_of_files.insert(0," ")
term_freq_matrix.insert(1, list_of_files)

for unique_word in unique_words:
    unique_word = unique_word.split()
    term_freq_matrix.append(unique_word)

print(term_freq_matrix)

谢谢!

python dictionary matrix nested-lists
2个回答
0
投票

要在没有外部库的情况下执行此操作:

代码:

d = {'test1.txt': {'peer': 1, 'appel': 1, 'moes': 1}, 
    'test2.txt': {'peer': 1, 'appel': 1}, 
    'test3.txt': {'peer': 1, 'moes': 2}, 
    'test4.txt': {'peer': 1, 'moes': 1, 'ananas': 1}}

res = [[''] + list(d.keys())]
for c in set(k for v in d.values() for k in v.keys()):
    res.append([c] + [d[k].get(c, 0) for k in res[0][1:]])

输出:

>>> res
[['', 'test1.txt', 'test2.txt', 'test3.txt', 'test4.txt'],
 ['peer', 1, 1, 1, 1],
 ['ananas', 0, 0, 0, 1],
 ['appel', 1, 1, 0, 0],
 ['moes', 1, 0, 2, 1]]

0
投票
your_dict = {'test1.txt': {'peer': 1, 'appel': 1, 'moes': 1}, 
'test2.txt': {'peer': 1, 'appel': 1}, 
'test3.txt': {'peer': 1, 'moes': 2}, 
'test4.txt': {'peer': 1, 'moes': 1, 'ananas': 1}}

sklearn具有用于此类预处理的简洁实用程序类

from sklearn.feature_extraction import DictVectorizer
vectorizer = DictVectorizer()
matrix = vectorizer.fit_transform(list(your_dict.values()))

[字典键到矩阵索引的映射在vectorizer.vocabulary_可用


0
投票

与大熊猫:

>>> d
{'test1.txt': {'peer': 1, 'appel': 1, 'moes': 1}, 'test2.txt': {'peer': 1, 'appel': 1}, 'test3.txt': {'peer': 1, 'moes': 2}, 'test4.txt': {'peer': 1, 'moes': 1, 'ananas': 1}}

>>> import pandas as pd
>>> df = pd.DataFrame(d).fillna(0)
>>> df
        test1.txt  test2.txt  test3.txt  test4.txt
ananas        0.0        0.0        0.0        1.0
appel         1.0        1.0        0.0        0.0
moes          1.0        0.0        2.0        1.0
peer          1.0        1.0        1.0        1.0

>>> result = [df.columns.to_numpy().tolist()]+ df.reset_index(level=0).to_numpy().tolist()
>>> result

输出

[['test1.txt', 'test2.txt', 'test3.txt', 'test4.txt'],
 ['ananas', 0.0, 0.0, 0.0, 1.0], 
 ['appel', 1.0, 1.0, 0.0, 0.0], 
 ['moes', 1.0, 0.0, 2.0, 1.0], 
 ['peer', 1.0, 1.0, 1.0, 1.0]]
© www.soinside.com 2019 - 2024. All rights reserved.