Python:将各行与dict中的值相加

时间:2018-10-24 10:54:51

标签: python python-3.x

dict = {'A': 71.07884,
    'B': 110,
    'C': 103.14484,
    'D': 115.08864,
    'E': 129.11552,
    'F': 147.1766,
    'G': 57.05196,
    'H': 137.1412
    }


def search_replace(search, replacement, searchstring):
    p = re.compile(search)
    searchstring = p.sub(replacement, searchstring)
    return (searchstring)


def main():
    with open(sys.argv[1]) as filetoread:
    lines = filetoread.readlines()
    file = ""

    for i in range(len(lines)):
        file += lines[i]

    file = search_replace('(?<=[BC])', ' ', file)

    letterlist = re.split('\s+', file)

    for j in range(len(letterlist)):
        print(letterlist[j])

if __name__ == '__main__':
    import sys
    import re
    main()

我的程序打开一个文件,并在B或C之后拆分字母文本。

文件如下:

ABHHFBFEACEGDGDACBGHFEDDCAFEBHGFEBCFHHHGBAHGBCAFEEAABCHHGFEEEAEAGHHCF

现在我想将每行与字典中的值相加。

例如:

AB = 181.07884
HHFB = 531.4590000000001

以此类推。

我不知道如何开始。非常感谢您的所有回答。

4 个答案:

答案 0 :(得分:1)

尝试简化事情...

鉴于您已经有一个字符串s和一个字典d

ctr = 0
temp = ''
for letter in s:
    ctr += d[letter]
    temp += letter
    if letter in 'BC':
        print(temp, ctr)
        ctr = 0
        temp = ''

如果您提供的位置:

s = "ABHHFBFEACEGDGDACBGHFEDDCAFEBHGFEBCFHHHGBAHGBCAFEEAABCHHGFEEEAEAGHHCF"
d = {'A': 71.07884,
'B': 110,
'C': 103.14484,
'D': 115.08864,
'E': 129.11552,
'F': 147.1766,
'G': 57.05196,
'H': 137.1412
}

您得到结果(打印到终端):

>>> ('AB', 181.07884)
('HHFB', 531.4590000000001)
('FEAC', 450.5158)
('EGDGDAC', 647.6204)
('B', 110)
('GHFEDDC', 803.8074)
('AFEB', 457.37096)
('HGFEB', 580.4852800000001)
('C', 103.14484)
('FHHHGB', 725.6521600000001)
('AHGB', 375.272)
('C', 103.14484)
('AFEEAAB', 728.64416)
('C', 103.14484)
('HHGFEEEAEAGHHC', 1571.6099199999999)

答案 1 :(得分:1)

您已经完成了大部分工作!您错过的就是每个子字符串的总和。

由于子字符串可能会更频繁地出现,因此我只进行一次求和,并将每个子字符串的值存储在dict中(以及您上面为字母与值之间的关系所使用的dict,我将其重命名为mydict以避免关键字混淆):

snippets = {}
for snippet in letterlist:
    if snippet not in snippets:
        value = 0
        for s in snippet:
            value += mydict.get(s)
        snippets[snippet] = value
print(snippets)

这给了我一个输出

{
'AB': 181.07884, 
'HHFB': 531.4590000000001, 
'FEAC': 450.5158, 
'EGDGDAC': 647.6204, 
'B': 110, 
'GHFEDDC': 803.8074, 
'AFEB': 457.37096, 
'HGFEB': 580.4852800000001, 
'C': 103.14484, 
'FHHHGB': 725.6521600000001, 
'AHGB': 375.272, 
'AFEEAAB': 728.64416, 
'HHGFEEEAEAGHHC': 1571.6099199999999, 
'F': 147.1766}

答案 2 :(得分:1)

打开文件,然后阅读每个字符,然后在词典中找到该字符并将其值加到总计中。

sum_ = 0
letters = "letters_file"
opened = open(letters, "r")
for row in opened:
    for char in row:
        sum_ += int(your_dictionary[char])

print(sum_)

答案 3 :(得分:1)

您可以在字典理解中将re.splititertools.zip_longest一起使用:

import re
from itertools import zip_longest
i = iter(re.split('([BC])', s))
{w: sum(d[c] for c in w)for p in zip_longest(i, i, fillvalue='') for w in (''.join(p),)}

这将返回:

{'AB': 181.07884, 'HHFB': 531.4590000000001, 'FEAC': 450.5158, 'EGDGDAC': 647.6204, 'B': 110, 'GHFEDDC': 803.8074, 'AFEB': 457.37096, 'HGFEB': 580.4852800000001, 'C': 103.14484, 'FHHHGB': 725.6521600000001, 'AHGB': 375.272, 'AFEEAAB': 728.64416, 'HHGFEEEAEAGHHC': 1571.6099199999999, 'F': 147.1766}