基于多个条件对字典中的值求和

时间:2015-04-21 00:16:51

标签: python dictionary sum iteration multiple-conditions

我正在尝试在多个词典之间对值进行求和,例如:

oneDic = {'A': 3, 'B': 0, 'C':1, 'D': 1, 'E': 2}
otherDic = {'A': 9, 'D': 1, 'E': 15}

我想在oneDic 中找到otherDic 的值,如果otherDic 中找到它们,并且 {{1>中的相应值小于特定值

oneDic = {'A': 3, 'B': 0, 'C':1, 'D': 1, 'E': 2}
otherDic = {'A': 9, 'D': 1, 'E': 15}
value = 12
test = sum(oneDic[value] for key, value in oneDic.items() if count in otherTest[count] < value
return (test)

我希望值为4,因为在C中找不到otherDicEotherDic的值不小于value

但是当我运行这段代码时,我得到了一个可爱的键错误,有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:1)

以下代码段有效。我不知道代码中的count变量是什么:

oneDic = {'A': 3, 'B': 0, 'C':1, 'D': 1, 'E': 2}
otherDic = {'A': 9, 'D': 1, 'E': 15}

value = 12
test = sum(j for i,j in oneDic.items() if (i in otherDic) and (otherDic[i] < value))
print(test)

Link to working code

答案 1 :(得分:1)

这个怎么样

sum(v for k, v in oneDic.items() if otherDic.get(k, value) < value)

这里我们迭代k, v对oneDic,只有otherDic.get(k, value)的回复为< value才包含它们。 dict.get有两个参数,第二个是可选的。如果未找到密钥,则使用默认值。在这里,我们将默认值设置为value,以便不包含otherDic中缺少的密钥。

顺便说一下,获得KeyError的原因是因为您尝试通过执行B and CotherDic['B']在迭代中的某个时间点访问otherDic['C']KeyError。但是,在.get中使用otherDic.get('B')将返回默认值None,因为您没有提供默认值 - 但它不会有KeyError