Нужна помощь в оптимизации генератора словаря
У меня есть список словарей:
[{'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 шт):
Тут лучше сделать вспомогательный словарь вида 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)