我无法获得字符串值的总和。 虽然如果有整数形式,我可以生成以下内容:
size = {
'serverA' : [10, 10],
'serverB' : [3, 3, 3],
}
如果我使用sums = {k: sum(i for i in v if isinstance(i, int)) for k, v in size.items()}
,我将能够获得{'serverA': 20, 'serverB': 9}
等输出
但是,我没有在列表的值中使用整数,而是得到如下字符串:
size = {
'serverA' : ['10', '10'],
'serverB' : ['3', '3', '3'],
}
如果我使用相同的命令生成值的总和,而没有错误,则输出为{'serverA': 0, 'serverB': 0}
答案 0 :(得分:3)
您可以使用map()
将值映射到int
s:
>>> {k: sum(map(int, v)) for k, v in size.items()}
{'serverA': 20, 'serverB': 9}
注意:如果您的值不是整数,则会引发ValueError
异常
真的不明白为什么你的基础案例中有isintance(i, int)
。
答案 1 :(得分:2)
只需使用int(integer_string)
sums = {k: sum(int(i) for i in v) for k, v in size.items()}
另外,请记住使用isinstance
通常被视为反模式。如果您希望类型检查,请查看Python 3.6 type annotations或使用其他语言。