Jan*_*Jan 1 python dictionary python-2.7
我想要对相同键的值进行求和:H, C, O, N, S根据字典composition输入字符串的组合A, C, D, E.
composition = {
'A': {'H': 5, 'C': 3, 'O': 1, 'N': 1},
'C': {'H': 5, 'C': 3, 'O': 1, 'N': 1, 'S': 1},
'D': {'H': 5, 'C': 4, 'O': 3, 'N': 1},
'E': {'H': 7, 'C': 5, 'O': 3, 'N': 1},
}
string_input = ['ACDE', 'CCCDA']
Run Code Online (Sandbox Code Playgroud)
预期的结果应该是
out = {
'ACDE' : {'H': 22, 'C': 15, 'O': 8, 'N': 4, 'S': 1},
'CCCDA' : {'H': 15, 'C': 9, 'O': 3, 'N': 3, 'S': 3},
}
Run Code Online (Sandbox Code Playgroud)
我试图使用Counter但坚持unsupported operand type(s) for +: 'int' and 'Counter'
from collections import Counter
for each in string_input:
out = sum(Counter(composition[aa]) for aa in each)
Run Code Online (Sandbox Code Playgroud)
sum()有一个起始值,从中开始总和.如果第一个参数中没有要求和的值,这也会提供默认值.该起始值是0整数.
sum(iterable[, start])Sums 从左到右开始和可迭代的项目并返回总数.开始默认为
0.
在对Counter对象求和时,给它一个空Counter()的开始:
sum((Counter(composition[aa]) for aa in each), Counter())
Run Code Online (Sandbox Code Playgroud)
如果您随后将结果分配给分配给您的字典中的键,则将您的预期结果作为实例获取:outCounter
>>> out = {}
>>> for each in string_input:
... out[each] = sum((Counter(composition[aa]) for aa in each), Counter())
...
>>> out
{'ACDE': Counter({'H': 22, 'C': 15, 'O': 8, 'N': 4, 'S': 1}), 'CCCDA': Counter({'H': 25, 'C': 16, 'O': 7, 'N': 5, 'S': 3})}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
686 次 |
| 最近记录: |