我有一个类似
的列表defaultdict(list,
{37.0: ['C22H27O7',
'C21H23O8',
'C25H35O7',
'C24H31O8',
'C23H27O9',
'C22H23O10',
'C21H19O11',
'C20H15O12',
'C19H11O13'],
111.0: ['C22H27O7',
'C19H15O10',
'C25H35O7',
'C22H23O10',
'C24H31O8',
'C21H19O11',
'C23H27O9',
'C20H15O12',
'C19H11O13'],
74.0: ['C21H23O8',
'C19H15O10',
'C25H35O7',
'C23H27O9',
'C24H31O8',
'C22H23O10',
'C21H19O11',
'C20H15O12',
'C19H11O13'],
148.0: ['C25H35O7',
'C21H19O11',
'C24H31O8',
'C20H15O12',
'C23H27O9',
'C19H11O13'],
185.0: ['C25H35O7', 'C20H15O12', 'C24H31O8', 'C19H11O13'],
222.0: ['C25H35O7', 'C19H11O13']})
我有一个calculateMass函数,它是
def calculateMass(formula):
if(formula[0:1] == "C"):
# print(add[k]1:3)
C = int(formula[1:3])
C = C*12000
print(C)
if(formula[3:4] == "H"):
H = (int(formula[4:6]))
H = H*1008
if(formula[6:7] == "O"):
O=(int(formula[7:9]))
O=O*15995
total = O + C + H
print(total)
我的目标是相对于Mass削减myList,例如,我想要的输出应该是:
[1] 37-> C22H27O7-> C21H23O8(从此处剪切是因为下一个 元素的质量[C25H35O7]> [C21H23O8])
[2] 37-> C25H35O7-> C24H31O8-> C23H27O9-> C22H23O10-> C21H19O11-> C20H15O12-> C19H11O13(由于质量在下降, 不需要切割。)
并遍历其他键值
[1] 111-> ......
如何在Python中执行此操作?
答案 0 :(得分:1)
假设只需要输出(而不是带有拆分列表的其他数据结构),则可以遍历公式列表,将每个值calculateMass(myList[index][i])
与上一个calculateMass(myList[index][i-1])
进行比较,如下所示:
for index in myList:
count = 1
print("[", count, "]", index)
print(myList[index][0])
for i in range(1,len(myList[index])):
if calculateMass(myList[index][i]) > calculateMass(myList[index][i-1]):
count += 1
# print("-- cut --")
print("[", count, "]", index)
print(myList[index][i])
答案 1 :(得分:0)
您没有指定myList的外观,但是假设它只是公式字符串的列表,则可以执行以下操作:
from collections import defaultdict
group_dict = defaultdict(list)
for item in my_list:
group_dict[calculateMass(item)].append(item)
这样,您将获得一个字典,其键将是质量,其值将是公式列表。
然后您可以使用
遍历字典的键。for key in sorted(group_dict.keys()):
print(key, group_dict[key])
打印按质量排序的子列表。
如果要对每个原始词典的列表执行此操作,建议您将整个内容放入函数中,并针对要处理的每个列表调用它。