为了账号安全,请及时绑定邮箱和手机立即绑定

Python:将每一行与字典中的值相加

Python:将每一行与字典中的值相加

慕姐4208626 2021-07-18 20:12:20
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现在我想用 dict 中的值对每一行求和。例如:AB = 181.07884HHFB = 531.4590000000001等等。我不知道如何开始。非常感谢您的所有回答。
查看完整描述

3 回答

?
慕斯709654

TA贡献1840条经验 获得超5个赞

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


由于子字符串可以更频繁地出现,我将只进行一次求和,并存储在 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}


查看完整回答
反对 回复 2021-07-28
?
炎炎设计

TA贡献1808条经验 获得超4个赞

尝试简化事情...


鉴于您已经有一个字符串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)


查看完整回答
反对 回复 2021-07-28
  • 3 回答
  • 0 关注
  • 178 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信