python中字典值的总和,并得出“不支持的操作数类型”

2024-10-04 03:19:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有本字典:

result = {'kid': ['$6.00', '$159.00', '$10.00'], 
          'entertainment': ['$2.40', '$3.10', '$30.37', '$40.15'], 
          'food': ['$5.04', '$8.00', '$160.15'], 
          ... }

我正在尝试编写代码,将每个值的数量相加并打印到相应的键旁边,结果如下:

^{pr2}$

我使用了下面的代码和它的变体,试图得到值的总和。在

sumCat={}

for k, v in result.items():
    sumCat[k] = sum(v)

print(sumCat)

但我总是收到这样的错误信息:

unsupported operand type(s) for +: 'int' and 'str'

我不明白这个消息。在


Tags: 代码infor数量字典fooditems变体
3条回答

您可以使用字典理解:

result = {'kid': ['$6.00', '$159.00', '$10.00'], 'entertainment': ['$2.40', '$3.10', '$30.37', '$40.15'], 'food': ['$5.04', '$8.00', '$160.15']}
final_result = {a:"$ {}".format(round(sum(float(i[1:]) for i in b), 2)) for a, b in result.items()}

输出:

^{pr2}$

这里的问题是你试图把字符串加在一起——注意原始答案中的价格是如何在报价中的,并且有$符号,它们不仅仅是数字!在

你要解决的就是这个问题。我在这里避免使用sum方法,因为它并不是真正为处理这样的输入而设计的。有一种方法可以做到:

sumCat={}

for k, v in result.items():
    summed_vals = 0
    for price in v:
        if '-' in price:
            # takes into account the dollar sign/negative sign
            summed_vals -= float(price[2:])         
        else:
            summed_vals += float(price[1:]) # takes into account the dollar sign
    sumCat[k] = format(summed_vals, '.2f') # rounds to nearest cent

print(sumCat)

#output
{'food': '173.19', 'kid': '175.00', 'entertainment': '76.02'}

在字符串列表中使用“sum”。你必须把每一个都转换成一个数值,把这些数值相加,然后转换成你想要的形式。在

我建议您只处理这些值;保留$作为输出格式。在

相关问题 更多 >