Суммирование значений в словаре на основе нескольких условий

Я пытаюсь суммировать значения между несколькими словарями, например:

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)

Ссылка на рабочий код

Другие вопросы по тегам