在组合值时,如何最好地处理字典中的无值?

2024-05-01 22:03:18 发布

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

我试图修改字典中的一个键值,如果键值为None或key不存在,则应该将其设置为另外两个键值的相加。 但是,我在尝试添加None的'unsupported operand type(s) for +: 'NoneType' and 'NoneType'时出错

我如何才能最好地编写这个来处理丢失的键或存在但没有值的键? 我尝试的代码是:

    for quote in quotes_results:
        exit_fee_combined = quote.get('exitFeeA', None) + quote.get('exitFeeB', None)
        quote.setdefault('exitFeeCombined', exit_fee_combined)

下面这段可怕的代码完成了这项工作,但似乎过于复杂(我不能使用setdefault,因为如果找到键,它将不使用默认值,而是使用None作为值)。 有什么改进的方法吗

    for quote in quotes_results:
        exit_fee_A = quote.get('exitFeeA', None)
        exit_fee_B = quote.get('exitFeeB', None)
        if exit_fee_A and exit_fee_B:
            exit_fee_combined = exit_fee_B + exit_fee_A
        elif exit_fee_A or exit_fee_B:
            exit_fee_combined = exit_fee_A or exit_fee_B
        else:
            exit_fee_combined = None
        existing_combined_fee = quote.get('exitFeeCombined', None)
        if not existing_combined_fee:
            quote['exitFeeCombined'] = exit_fee_combined

Tags: and代码innoneforgetexitresults
2条回答
for quote in quotes_results:
    exit_fee_combined = quote.get('exitFeeA', 0) + quote.get('exitFeeB', 0)

在本例中,最简单的解决方案是正确选择get的结果。既然加0对数字没有影响,那就这么做吧。如果值是字符串,请使用""而不是0

根据乔恩的评论,这是最好的解决方案:

((quote.get('A') or 0) + (quote.get('B') or 0) or None)

相关问题 更多 >