2015-12-09 3 views
0

мой первый списокКак объединить два списка словаря

"networks":[ 
{"name": "public", "ip_ranges":[["172.16.0.2", "172.16.0.126" ] ], "id": 173,…}, 
{"name": "management", "ip_ranges":[["192.168.0.1", "192.168.0.254" ] ],…}, 
{"name": "storage", "ip_ranges":[["192.168.1.1", "192.168.1.254" ] ],…}, 
{"name": "private", "ip_ranges":[["192.168.2.1", "192.168.2.254" ] ],…}, 
{"name": "public", "ip_ranges":[["172.16.0.2", "172.16.0.126" ] ],…}, 
{"name": "management", "ip_ranges":[["192.168.0.1", "192.168.0.254" ] ],…}, 
{"name": "storage", "ip_ranges":[["192.168.1.1", "192.168.1.254" ] ],…}, 
{"name": "private", "ip_ranges":[["192.168.2.1", "192.168.2.254" ] ],…}, 
{"name": "fuelweb_admin", "ip_ranges":[], "id": 181, "meta":{"notation": "ip_ranges",…}, 
{"name": "fuelweb_admin", "ip_ranges":[["10.30.0.3", "10.30.0.254" ] ], "id": 1,…} 
] 

и второй ДИКТ, как это

"network_conf": [ 

      { 
       "network_name": "default", 
       "public": { 
        "ip_ranges": { 
         "start": "135.21.67.150", 
         "end": "135.21.67.170" 
        }, 
        "cidr": "135.21.67.128/26", 
        "gateway": "135.21.67.129", 
        "floating_ip_ranges": { 
         "start": "135.21.67.171", 
         "end": "135.21.67.180" 
        } 

       }, 
       "storage": { 
        "ip_ranges": { 
         "start": "192.168.109.100", 
         "end": "192.168.109.200" 
        }, 
        "cidr": "192.168.109.0/24" 

       }, 
       "management": { 
        "ip_ranges": { 
         "start": "192.168.27.150", 
         "end": "192.168.27.190" 
        }, 
        "cidr": "192.168.27.128/26", 
        "gateway": "192.168.27.129" 

       } 
      }, 

      { 
       "network_name": "ops_test_network_0", 
       "public": { 
        "ip_ranges": { 
         "start": "135.21.67.160", 
         "end": "135.21.67.170" 
        }, 
        "cidr": "135.21.67.128/26", 
        "gateway": "135.21.67.129", 
        "floating_ip_ranges": { 
         "start": "135.21.67.171", 
         "end": "135.21.67.180" 
        } 

       }, 
       "storage": { 
        "ip_ranges": { 
         "start": "192.168.109.100", 
         "end": "192.168.109.200" 
        }, 
        "cidr": "192.168.109.0/24" 

       }, 
       "management": { 
        "ip_ranges": { 
         "start": "192.168.27.150", 
         "end": "192.168.27.190" 
        }, 
        "cidr": "192.168.27.128/26", 
        "gateway": "192.168.9.1" 

       } 
      } 

    ], 

я хочу, чтобы объединить 1list из dict['name']==public на 2-й ключ Словаре «общественность»

Каков наилучший способ сделать это, , если есть более простой способ, который может быть изменен 2-й диктофон соответственно , главный вопрос - сопоставить различный список Словаря по ключевому public => public, management=>management .... и т.д.

+2

Можете ли вы представить пример вывода. Неясно, чего вы хотите в результате. –

+0

@ MikeMüller Если вы видите, что второй dict - это фактически список dict, который содержит 0 => 'management'> {..}, "public" => {..}, "storage" => {...} так что я хочу, чтобы map = 0-й публичный доступ к 1 публике в 1-м списке dict 1-я публикация для t0 2-е появление публики в 1-м списке –

+0

Как насчет добавления этой информации в вопрос вместе с описательным примером? –

ответ

0

У меня есть два списка одинаковой длины:

[1,2,3,4] и [a,b,c,d]

dict(zip([1,2,3,4], [a,b,c,d])) 

Если списки большие, вы должны использовать itertools.izip ,

Если у вас есть больше ключей, чем значений, и вы хотите заполнить значения для дополнительных ключей, вы можете использовать itertools.izip_longest.

Здесь a, b, c и d являются переменными - он будет работать нормально (пока они определены), но вы, вероятно, имели в виду ['a','b','c','d'], если вы хотите, чтобы они были строками.

zip принимает первый элемент из каждой итерации и делает кортеж, то второй элемент из каждых, и т.д. и т.п.

dict может принимать итератор из итерируемых, где каждый внутренний итерацию имеет два элемента - это тогда, использует первый как ключ, а второй - значение для каждого элемента.

Смежные вопросы