Я хочу создать словарь со списком значений для нескольких ключей с одним циклом for в Python3. Для меня время выполнения и объем памяти имеют первостепенное значение, поскольку файл, который читает мой скрипт на Python3, довольно длинный.
Я уже пробовал следующий простой скрипт:
p_avg = []
p_y = []
m_avg = []
m_y = []
res_dict = {}
with open('/home/user/test', 'r') as f:
for line in f:
p_avg.append(float(line.split(" ")[5].split(":")[1]))
p_y.append(float(line.split(" ")[6].split(":")[1]))
m_avg.append(float(line.split(" ")[1].split(":")[1]))
m_avg.append(float(line.split(" ")[2].split(":")[1]))
res_dict['p_avg'] = p_avg
res_dict['p_y'] = p_y
res_dict['m_avg'] = m_avg
res_dict['m_y'] = mse_y
print(res_dict)
Формат моего home/user/test
файла:
n:1 m_avg:7588.39 m_y:11289.73 m_u:147.92 m_v:223.53 p_avg:9.33 p_y:7.60 p_u:26.43 p_v:24.64
n:2 m_avg:7587.60 m_y:11288.54 m_u:147.92 m_v:223.53 p_avg:9.33 p_y:7.60 p_u:26.43 p_v:24.64
n:3 m_avg:7598.56 m_y:11304.50 m_u:148.01 m_v:225.33 p_avg:9.32 p_y:7.60 p_u:26.43 p_v:24.60
.
.
.
Сценарий Python, показанный выше, работает, но сначала он слишком длинный и повторяющийся, во-вторых, я не уверен, насколько он эффективен. В конце концов я подумал создать то же самое со списком. Примерно так:
(res_dict['p_avg'], res_dict['p_y']) = [(float(line.split(" ")[5].split(":")[1]), float(line.split(" ")[6].split(":")[1])) for line in f]
Но для всех четырех словарных ключей. Считаете ли вы, что использование списочного понимания может уменьшить объем используемой памяти сценария и скорость выполнения? Каким должен быть правильный синтаксис для понимания списка?
[РЕДАКТИРОВАТЬ] Я изменил dict
-> res_dict
, так как было упомянуто, что это не очень хорошая практика, я также исправил опечатку, где p_y
не указывал на правильное значение и добавил оператор печати для печати результирующего словаря, упомянутого другими пользователями.