Функция zip():
Так как zip - это итератор, для отображение его содержимого используется list()
Пример использования zip:
In [1]: a = [1,2,3] In [2]: b = [100,200,300] In [3]: list(zip(a,b)) Out[3]: [(1, 100), (2, 200), (3, 300)]
Использование zip() со списками разной длины:
In [4]: a = [1,2,3,4,5] In [5]: b = [10,20,30,40,50] In [6]: c = [100,200,300] In [7]: list(zip(a,b,c)) Out[7]: [(1, 10, 100), (2, 20, 200), (3, 30, 300)]
Пример использования zip для создания словаря:
In [4]: d_keys = ['hostname', 'location', 'vendor', 'model', 'IOS', 'IP'] In [5]: d_values = ['london_r1', '21 New Globe Walk', 'Cisco', '4451', '15.4', '10.255.0.1'] In [6]: list(zip(d_keys,d_values)) Out[6]: [('hostname', 'london_r1'), ('location', '21 New Globe Walk'), ('vendor', 'Cisco'), ('model', '4451'), ('IOS', '15.4'), ('IP', '10.255.0.1')] In [7]: dict(zip(d_keys,d_values)) Out[7]: {'IOS': '15.4', 'IP': '10.255.0.1', 'hostname': 'london_r1', 'location': '21 New Globe Walk', 'model': '4451', 'vendor': 'Cisco'} In [8]: r1 = dict(zip(d_keys,d_values)) In [9]: r1 Out[9]: {'IOS': '15.4', 'IP': '10.255.0.1', 'hostname': 'london_r1', 'location': '21 New Globe Walk', 'model': '4451', 'vendor': 'Cisco'}
В примере ниже есть отдельный список, в котором хранятся ключи, и словарь, в котором хранится в виде списка (чтобы сохранить порядок) информация о каждом устройстве.
Соберем их в словарь с ключами из списка и информацией из словаря data:
In [10]: d_keys = ['hostname', 'location', 'vendor', 'model', 'IOS', 'IP'] In [11]: data = { ....: 'r1': ['london_r1', '21 New Globe Walk', 'Cisco', '4451', '15.4', '10.255.0.1'], ....: 'r2': ['london_r2', '21 New Globe Walk', 'Cisco', '4451', '15.4', '10.255.0.2'], ....: 'sw1': ['london_sw1', '21 New Globe Walk', 'Cisco', '3850', '3.6.XE', '10.255.0.101'] ....: } In [12]: london_co = {} In [13]: for k in data.keys(): ....: london_co[k] = dict(zip(d_keys,data[k])) ....: In [14]: london_co Out[14]: {'r1': {'IOS': '15.4', 'IP': '10.255.0.1', 'hostname': 'london_r1', 'location': '21 New Globe Walk', 'model': '4451', 'vendor': 'Cisco'}, 'r2': {'IOS': '15.4', 'IP': '10.255.0.2', 'hostname': 'london_r2', 'location': '21 New Globe Walk', 'model': '4451', 'vendor': 'Cisco'}, 'sw1': {'IOS': '3.6.XE', 'IP': '10.255.0.101', 'hostname': 'london_sw1', 'location': '21 New Globe Walk', 'model': '3850', 'vendor': 'Cisco'}}