大量切割Python清单

时间:2019-11-21 17:59:34

标签: python pandas dataframe dictionary

我有一个类似

的列表
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中执行此操作?

2 个答案:

答案 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])

打印按质量排序的子列表。

如果要对每个原始词典的列表执行此操作,建议您将整个内容放入函数中,并针对要处理的每个列表调用它。