Суммирование значений в словаре на основе нескольких условий
Я пытаюсь суммировать значения между несколькими словарями, например:
oneDic = {'A': 3, 'B': 0, 'C':1, 'D': 1, 'E': 2}
otherDic = {'A': 9, 'D': 1, 'E': 15}
Я хочу суммировать значения в oneDic
если они найдены в otherDic
и если соответствующее значение в otherDic
меньше определенного значения
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
не найден в otherDic
и значение E
в otherDic
не менее чем value
Но когда я запускаю этот код, я получаю прекрасную ключевую ошибку, кто-нибудь может указать мне правильное направление?
2 ответа
Как насчет этого
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 C
в какой-то момент в итерации, делая otherDic['B']
а также otherDic['C']
и это KeyError
, Однако, используя .get
как в otherDic.get('B')
вернет значение по умолчанию None
так как вы не предоставили дефолт - но он не будет иметь KeyError
Следующий фрагмент кода работает. Я не знаю что 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)