【发布时间】:2023-03-20 22:22:01
【问题描述】:
我有一个问题,不知道如何创建矩阵
我有一本这种类型的字典:
dico = {
"banana": "sp_345",
"apple": "ap_456",
"pear": "pe_645",
}
还有这样的文件:
sp_345_4567 pe_645_4567876 ap_456_45678 pe_645_4556789
sp_345_567 pe_645_45678
pe_645_45678 ap_456_345678
sp_345_56789 ap_456_345
pe_645_45678 ap_456_345678
sp_345_56789 ap_456_345
s45678 f45678 f456789 ap_456_52546135
我想做的是创建一个矩阵,在该矩阵中,我们从该行中的字典中找到一个值的 n 倍以上。
这就是我想继续的方式:
第 1 步创建一个包含相关值和行数的字典:
像这样:
dictionary = {'1': 'sp_345_4567','pe_645_4567876', 'ap_456_45678', 'pe_645_4556789'; '2': 'sp_345_567', 'pe_645_45678'; '3:' 'pe_645_45678','ap_456_345678'; '4:' etc ..
然后我想将值与我的第一个字典 dico 进行比较,并查看例如香蕉键出现在每一行中的次数(因此对我字典的所有键执行此操作),除了问题是我的 dico 的值不等于我的字典的值,因为它们后面跟着这个模式'_\w+''
我们的想法是制作一个看起来像这样的 final_dict 以便能够在最后制作一个矩阵:
final_dict = {'line1': 'Banana' : '1' ; 'Apple': '1'; 'Pear':2; 'line2': etc ...
这是我的代码不起作用:
import pprint
import re
import csv
dico = {
"banana": "sp_345",
"apple": "ap_456",
"pear": "pe_645",
}
dictionary = {}
final_dict = {}
cnt = 0
with open("test.txt") as file :
reader = csv.reader(file, delimiter ='\t')
for li in reader:
grp = li
number = 1
for li in reader:
dictionary[number] = grp
number += 1
pprint.pprint(dictionary)
number_fruit = {}
for key1, val1 in dico.items():
for key2, val2 in dictionary.items():
if val1 == val2+'_\w+':
final_dict[key1] = val2
感谢您的帮助
编辑:
我尝试过使用字典理解
import csv
import re
dico = {
"banana": "sp_345",
"apple": "ap_456",
"pear": "pe_645",
}
with open("test.txt") as file :
reader = csv.reader(file, delimiter ='\t')
for li in reader:
pattern = re.search(dico["banana"]+"_\w+", str(li))
if pattern:
final_dict = {"line" + str(index + 1):{key:line.count(text) for key, text in dico.items()} for index, line in enumerate(reader)}
print(final_dict)
但是当我打印我的最终字典时,它只为香蕉输入 0 ...
{'line1': {'banana': 0, 'apple': 0, 'pear': 0}, 'line2': {'banana': 0, 'apple': 0, 'pear': 0}, 'line3': {'banana': 0, 'apple': 0, 'pear': 0}, 'line4': {'banana': 0, 'apple': 0, 'pear': 0}, 'line5': {'banana': 0, 'apple': 0, 'pear': 0}, 'line6': {'banana': 0, 'apple': 0, 'pear': 0}}
所以是的,现在它看起来比我想要的多一点,但发生率并没有上升....:/也许我的情况应该在 dict 理解范围内??
【问题讨论】: