从字典键操作元组中的数据
Manipulating data in a tuple from dictionary keys
我有一个格式为
的元组列表(变量名称 '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.... 由于 Y,将除以 1.1847,依此类推。我还没有找到一种方法来做到这一点。
for row in values:
print(row[1], row[3]/ratios[row[1]])
my_tuple_list = [
(1, 'K', '-', 0.8878048780487805),
.....
]
result = {}
for (idx, key, _, number) in my_tuple_list:
result[key] = number / ratios[key]
print(result)
此解决方案展示了如何以清晰的方式解包元组列表,这可能比列表理解更容易阅读
列表推导式在这里应该很管用
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]
我有一个格式为
的元组列表(变量名称 '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.... 由于 Y,将除以 1.1847,依此类推。我还没有找到一种方法来做到这一点。
for row in values:
print(row[1], row[3]/ratios[row[1]])
my_tuple_list = [
(1, 'K', '-', 0.8878048780487805),
.....
]
result = {}
for (idx, key, _, number) in my_tuple_list:
result[key] = number / ratios[key]
print(result)
此解决方案展示了如何以清晰的方式解包元组列表,这可能比列表理解更容易阅读
列表推导式在这里应该很管用
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]