使用临时内存进行智能计算

我有一个代码,如果它们具有匹配的index [0],则需要遍历并总结索引x。什么是创建此的最佳解决方案?我想我可能有defaultdict,如果index [0]中有一个匹配项,它将添加这些值。有没有一种方法可以逐行读取它,并且将index [0]始终保留在临时内存中,如果它与下一个index [0]相匹配,它将进行总和?


这是我到目前为止的内容:


with open("test.txt") as f:

    dic = defaultdict(list)

    for line in f:

        spl =line.split("\t")

        if("Fam" in line):

            dic[spl[0]].append(spl[1:])

            a = float(spl[5])

            b = float(spl[6])

            sum = a * b

            output = str(sum)

            this = line.strip() + "\t"+output

            if("TK" in line): #I would like to start sum up after this. Read all lines that include "TK", check index[0] for matches, if match sum up. 


largeQ
浏览 162回答 1
1回答

MYYA

我建议使用sth这样的:with open('filename') as f:   def lineValue(line):     parts = line.split('\t')     return float(parts[5]) * float(parts[6])   def lineKey(line):     parts = line.split('\t')     return parts[0]   for match, lines in groupby(       line for line in f if "Fam" in line and "TK" in line,       lineKey):     yield sum(lineValue(line) for line in lines)这种方式取决于所有匹配值已经彼此跟随的事实。如果不是这种情况,itertools.groupby()将无济于事。当然,两次分界并不是最优雅的解决方案。如果匹配的行不会互相跟随,则您需要构建一个答案字典,然后defaultdict听起来很合理:result = defaultdict(float)with open('filename') as f:   def lineValue(line):     parts = line.split('\t')     return float(parts[5]) * float(parts[6])   def lineKey(line):     parts = line.split('\t')     return parts[0]   for line in f:     if "Fam" in line and "TK" in line:       result[lineKey(line)] += lineValue(line)再说一次,仅将生产线分开将是一个更优雅的解决方案。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python