Суммировать значения на основе двух диктовок с одинаковыми ключами

У меня есть словарь Python, например {'user_id': 'user_checkpoint'}

checkpoints_dict= {"id_11": "checkpoint_a", "id_13": "checkpoint_a", "id_15": 
                   "checkpoint_b", "id_22": "checkpoint_c", "id_99": "checkpoint_c", 
                   "id_4": "checkpoint_d", "id_2": None}

>>> checkpoints_dict 
>>> {'id_11': 'checkpoint_a',
     'id_13': 'checkpoint_a',
     'id_15': 'checkpoint_b',
     'id_2': None,
     'id_22': 'checkpoint_c',
     'id_4': 'checkpoint_d',
     'id_99': 'checkpoint_c'}

Примечание: у пользователя может не быть контрольной точки, такой как id_2!

У меня есть второй словарь вроде {'user_id': time}:

user_time = {"id_11": 40, "id_13": 95, "id_15": 150, "id_22": 12, 
             "id_4": 154, "id_99": 111 , "id_2": 24, "id_3": 43, "id_5": 65, "id_6": 45}

Примечание: Каждый user_id из checkpoints_dict можно найти в user_time

Как получить добавленное user_time для каждой контрольной точки в checkpoints_dict? Основываясь на примере, я бы ожидал sth. как это:

result_checkpoint_time = {"checkpoint_a": sum([40, 95]),
                          "checkpoint_b": sum([150]),
                          "checkpoint_c": sum([12, 111]),
                          "checkpoint_d": sum([154])}

Поскольку у меня нет умной идеи, чтобы подойти к этому, я не могу показать свои решения этой проблемы!

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
19
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам просто нужно использовать user_time dict для идентификатора, который вы получаете, перебирая контрольную точку:

checkpoints_dict = {
    "id_11": "checkpoint_a",
    "id_13": "checkpoint_a",
    "id_15": "checkpoint_b",
    "id_22": "checkpoint_c",
    "id_99": "checkpoint_c",
    "id_4": "checkpoint_d",
    "id_2": None,
}
user_time = {
    "id_11": 40,
    "id_13": 95,
    "id_15": 150,
    "id_22": 12,
    "id_4": 154,
    "id_99": 111,
    "id_2": 24,
    "id_3": 43,
    "id_5": 65,
    "id_6": 45,
}

Так:

result = {}
for id_, checkpoint in checkpoints_dict.items():
    if checkpoint is not None:
        result[checkpoint] = result.get(checkpoint, 0) + user_time[id_]

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