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

时间:2017-09-28 17:48:57

标签: python

我正在尝试修改字典中的键值,如果键值为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

2 个答案:

答案 0 :(得分:1)

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

在这种情况下,最简单的解决方案是正确选择get的结果。因为添加0对数字没有影响,所以就这样做。如果您的值是字符串,请使用""代替0

答案 1 :(得分:0)

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

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