Я предположил, что ваш целевой результат не был точным. Кажется более уместным сопоставить «ATG» с «ANG» (что я и сделал), а не «ANG» с «NTG» (ваша заявленная цель). Это решение относится к вашему заданному набору образцов, но может оказаться бесполезным для желаемого приложения, учитывая значительную разницу в масштабе.
Код:
import re
test = """
NTG 9
NAG 6
ANG 5
TTT 2
ATG 2
"""
test = [x.split(" ") for x in test.upper().split("\n") if x != ""]
#print(test)
index = 0
while index < len(test):
seq = test[index]
seq_regex = seq[0].replace("N", ".")
no_match_li = [x for x in test if len(re.findall(seq_regex, x[0])) == 0]
match_li = [int(x[1]) for x in test if len(re.findall(seq_regex, x[0])) != 0]
#print(no_match_li, match_li)
test = [[seq[0], sum(match_li)]] + no_match_li
index += 1
test = sorted(test, key=lambda x: x[1], reverse=True)
for seq in test:
print(seq[0], seq[1])
Выход:
NTG 11
NAG 6
ANG 5
TTT 2