Используйте словарь, в котором вы выбираете ключ и значение из списка keys
и val
при их итерации по ним, и просто для безопасности, если keys
и val
имеют неодинаковую длинуВы можете сжать их все вместе с помощью itertools.zip_longest , который создаст итератор самой длинной подпоследовательности, убедившись, что если, скажем, keys
длиннее val
, у нас нет ключей для них,может быть, переназначить их в будущем (Спасибо @quamrana)
from itertools import zip_longest
keys = ['Ptot', 'P1', 'P2', 'P3', 'Q1', 'Q2', 'Q3']
val = ['max', 'first', 'first', 'first', 'first', 'first', 'first']
print({k:v for k,v in zip_longest(keys, val)})
Вывод
{'Ptot': 'max', 'P1': 'first', 'P2': 'first', 'P3': 'first', 'Q1': 'first', 'Q2': 'first', 'Q3': 'first'}
Пример большей длины keys
, чем val
from itertools import zip_longest
keys = ['Ptot', 'P1', 'P2', 'P3', 'Q1', 'Q2', 'Q3', 'QX', 'QY']
val = ['max', 'first', 'first', 'first', 'first', 'first', 'first']
print({k:v for k,v in zip_longest(keys, val)})
Вывод будет
{'Ptot': 'max', 'P1': 'first', 'P2': 'first',
'P3': 'first', 'Q1': 'first', 'Q2': 'first', 'Q3': 'first',
'QX': None, 'QY': None}
, поэтому мы видим, что ключи здесь не потеряны, а используются и значения установлены на None, но использование zip приведет к потереэти ключи!
Но если мы хотим выбрать только элементы из меньшего списка, мы можем сделать следующее (спасибо @MitchelPaulin)
from itertools import zip_longest
keys = ['Ptot', 'P1', 'P2', 'P3', 'Q1', 'Q2', 'Q3', 'QX', 'QY']
val = ['max', 'first', 'first', 'first', 'first', 'first', 'first']
#Pick the smaller of the 2 lengths and iterate only on those indexes
length = min(len(keys), len(val))
print({keys[idx]:val[idx] for idx in range(length)})