Функция zip()
может принимать более двух итераций.Таким образом, вы можете использовать zip(z1, z2, z3)
вместо zip(z2, z3)
.Тем не менее, вам все равно нужно сгруппировать элементы, так как простая упаковка dict()
не будет работать, поскольку она не может обрабатывать вложенные словари, необходимые для трех кортежей.
Чтобы правильно сгруппировать элементы, я бы использовал collections.defaultdict()
:
from collections import defaultdict
z1 = ['A', 'A', 'B', 'B']
z2 = ['k1', 'k2', 'k1', 'k2']
z3 = ['v1', 'v2', 'v3', 'v4']
d = defaultdict(dict)
for x, y, z in zip(z1, z2, z3):
d[x][y] = z
print(d)
# defaultdict(<class 'dict'>, {'A': {'k1': 'v1', 'k2': 'v2'}, 'B': {'k1': 'v3', 'k2': 'v4'}})
Вышеописанное работает, потому что defaultdict(dict)
инициализирует словарь для несуществующих ключей,Он обрабатывает создание словаря для ключей для вас.
Кроме того, если вы заключите конечный результат в dict
:
print(dict(d))
# {'A': {'k1': 'v1', 'k2': 'v2'}, 'B': {'k1': 'v3', 'k2': 'v4'}}
Примечание: defaultdict
- это просто подкласс dict
, поэтому выможно относиться к нему так же, как к обычному словарю.