Управление данными в кортеже из ключей словаря - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть список кортежей (имя переменной 'values') в формате

(1, 'K', '-', 0.8878048780487805)
(2, 'Y', '-', 0.32882882882882886)
(3, 'E', '-', 0.7216494845360825)
(4, 'Y', 'B', 0.13963963963963963)
(5, 'V', '-', 0.28169014084507044)
(6, 'E', '-', 0.39690721649484534)
.....

И у меня есть этот словарь

ratios = {'K': 1.1512, 'A': 1.217, 'R': 1.1048, 'N': 1.242, 'D': 1.184,
      'C': 1.237, 'Q': 1.1364, 'G': 1.2381, 'H': 1.2174, 'I': 1.1657,
      'L': 1.1657, 'M': 1.1914, 'F': 1.2182, 'P': 1.1691, 'S': 1.1923,
      'T': 1.2113, 'W': 1.2555, 'Y': 1.1847, 'V':1.2254}

Что я хотел бы сделать, это пойтичерез мой список и разделите элемент в индексе 3 на значение в словаре, которое соответствует букве в индексе 1. Например, 0,8878 ... будет разделено на 1,1512 из-за K, для следующего 0,3288 ...будет разделен на 1,1847 из-за Y и так далее.Я еще не нашел способ сделать это.

Ответы [ 3 ]

0 голосов
/ 27 февраля 2019
my_tuple_list = [
    (1, 'K', '-', 0.8878048780487805),
    .....
]
result = {}
for (idx, key, _, number) in my_tuple_list:
    result[key] = number / ratios[key]

print(result)

В этом решении показано, как распаковать список кортежей понятным способом, который может быть проще для чтения, чем понимание списка

0 голосов
/ 27 февраля 2019

Понимание списка здесь должно работать отлично

tuple_list =[(1, 'K', '-', 0.8878048780487805),
(2, 'Y', '-', 0.32882882882882886),
(3, 'E', '-', 0.7216494845360825),
(4, 'Y', 'B', 0.13963963963963963),
(5, 'V', '-', 0.28169014084507044),
(6, 'E', '-', 0.39690721649484534)]

ratios = {'K': 1.1512, 'A': 1.217, 'R': 1.1048, 'N': 1.242, 'D': 1.184,
      'C': 1.237, 'Q': 1.1364, 'G': 1.2381, 'H': 1.2174, 'I': 1.1657,
      'L': 1.1657, 'M': 1.1914, 'F': 1.2182, 'P': 1.1691, 'S': 1.1923,
      'T': 1.2113, 'W': 1.2555, 'Y': 1.1847, 'V':1.2254}

[tup[3]/ratios.get(tup[1],1) for tup in tuple_list] 
использовать get, поэтому оно не выдаст ошибку, если ключ отсутствует в ratios

Вывод

[0.7711995118561331,
 0.2775629516576592,
 0.7216494845360825,
 0.11786919864914291,
 0.22987607380860978,
 0.39690721649484534]
0 голосов
/ 27 февраля 2019
for row in values:
    print(row[1], row[3]/ratios[row[1]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...