Нужна помощь в оптимизации генератора словаря

У меня есть список словарей:

[{'id': '1_2', 'iMaxSrc': 1}, {'id': '1_3', 'iMaxSrc': 0.5}, {'id': '3_5', 'iMaxSrc': 0.6}]

И есть словарь:

{'1_2': -0.006889606764994206, '1_3': -0.009956226776053036, '3_5': -0.009749068707461056}

Мне нужно получить словарь, где ключами будут ключи второго словаря, а значениями будут выражение value_dict2 / value_list_dict * 100. Причем значения для выражения должны браться из такого словаря в списке у которого значение по ключу 'id' = ключу элемента второго словаря.

Например первый словарь в списке имеет значение по ключу id = '1_2' значит значение в этом словаре по ключу 'iMaxSrc' должно быть в выражении с значением по ключу '1_2' во втором словаре.

Я задачу решил через сложный генератор, вот так:

{edge['id']: convert_kiloamps_to_percentage(edge['iMaxSrc'],current_edge_change[edge['id']]) for edge in edges}

где функция convert_kiloamps_to_percentage(edge['iMaxSrc'],current_edge_change[edge['id']]) осуществляет расчет выражения.

Результат генератора:

{'1_2': -0.6889606764994206, '1_3': -0.9956226776053037,'3_5': -0.9749068707461056}

Вопрос: я нагородил чего-то? Можно как то оптимальнее это сделать? Чтобы по красоте)


Ответы (1 шт):

Автор решения: n1tr0xs

Тут лучше сделать вспомогательный словарь вида id: iMaxSrc, а после уже производить обработку.

value_list_dict = [{'id': '1_2', 'iMaxSrc': 1}, {'id': '1_3', 'iMaxSrc': 0.5}, {'id': '3_5', 'iMaxSrc': 0.6}]
value_dict2 = {'1_2': -0.006889606764994206, '1_3': -0.009956226776053036, '3_5': -0.009749068707461056}

id_max = {d['id']: d['iMaxSrc'] for d in value_list_dict}

res = {key: val/id_max[key]*100 for key, val in value_dict2.items()}

Но можно и не создавать:

value_list_dict = [{'id': '1_2', 'iMaxSrc': 1}, {'id': '1_3', 'iMaxSrc': 0.5}, {'id': '3_5', 'iMaxSrc': 0.6}]
value_dict2 = {'1_2': -0.006889606764994206, '1_3': -0.009956226776053036, '3_5': -0.009749068707461056}

res = {d['id']: value_dict2[d['id']]/d['iMaxSrc']*100 for d in value_list_dict}

print(res)
→ Ссылка