字典中列表的字符串值的总和

时间:2017-08-31 01:10:59

标签: python list dictionary sum

我无法获得字符串值的总和。 虽然如果有整数形式,我可以生成以下内容:

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}

的总和显然是错误的

2 个答案:

答案 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或使用其他语言。