2016-08-24 3 views
0

Как объединить эти два списка и использовать alist в качестве ключей и blist в качестве значений? То, что я хотел бы сделать, это группировать значения в blist с соответствующими ключами. Так скажем, значения 3, 4, 2, None, None, 1, 1, 1, 6, 1, 2, 4, 5, 5, 7, 1, 1, 2, 3, 4, 5 должны иметь 'Inner OD' как ключ, а остальные должны иметь ключевое 'Outter OD': None, 3, 4, 6, 5, 1, 3, 2, 2, 2, 2, 1, 1, 1, 1, 3, 4, 3, 5, 6, 5, 2, 3Список разделов на основе элементов другого списка в виде ключей

поэтому в основном я хотел бы, чтобы это выглядело как этот

{'Inner OD': [3, 4, 2, None, None, 1, 1, 1, 6, 1, 2, 4, 5, 5, 7, 1, 1, 2, 3, 4, 5], 'Outter OD': [None, 3, 4, 6, 5, 1, 3, 2, 2, 2, 2, 1, 1, 1, 1, 3, 4, 3, 5, 6, 5, 2, 3]}) 

Любая помощь будет высоко оценен.

alist = [u'Outter OD', u'Outter OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Outter OD', u'Outter OD', u'Outter OD', u'Outter OD', u'Outter OD', u'Outter OD', u'Outter OD', u'Outter OD', u'Outter OD', u'Outter OD', u'Outter OD', u'Outter OD', u'Outter OD', u'Outter OD', u'Outter OD', u'Outter OD', u'Outter OD', u'Outter OD', u'Outter OD'] 

blist = [3, 4, 2, None, None, 1, 1, 1, 6, 1, 2, 4, 5, 5, 7, 1, 1, 2, 3, 4, 5, 1, None, 3, 4, 6, 5, 1, 3, 2, 2, 2, 2, 1, 1, 1, 1, 3, 4, 3, 5, 6, 5, 2, 3] 

ответ

2

Что-то вроде этого:

res = {} 
for i in range(len(alist)): 
    if alist[i] in res: 
     res[alist[i]].append(blist[i]) 
    else: 
     res[alist[i]]=[blist[i]] 

возвращает {'Inner OD': [2, None, None, 1, 1, 1, 6, 1, 2, 4, 5, 5, 7, 1, 1, 2, 3, 4, 5, 1, None, 3, 4, 6], 'Outter OD': [3, 4, 5, 1, 3, 2, 2, 2, 2, 1, 1, 1, 1, 3, 4, 3, 5, 6, 5, 2, 3]}

+1

Прекрасное спасибо! @ Gábor Erdős – Snowman08

+0

Добро пожаловать! Пожалуйста, отметьте ответ правильно, если это :) –

0

Он не делает ничего лучше, чем @ Габор Эрдеша ответ, но я думаю, что это немного яснее:

>>> alist = [u'Outter OD', u'Outter OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Inner OD', u'Outter OD', u'Outter OD', u'Outter OD', u'Outter OD', u'Outter OD', u'Outter OD', u'Outter OD', u'Outter OD', u'Outter OD', u'Outter OD', u'Outter OD', u'Outter OD', u'Outter OD', u'Outter OD', u'Outter OD', u'Outter OD',u'Outter OD', u'Outter OD', u'Outter OD'] 
>>> blist = [3, 4, 2, None, None, 1, 1, 1, 6, 1, 2, 4, 5, 5, 7, 1, 1, 2, 3, 4, 5, 1, None, 3, 4, 6, 5, 1, 3, 2, 2, 2, 2, 1, 1, 1, 1, 3, 4, 3, 5, 6, 5, 2, 3] 
>>> res = {} 
>>> for key, val in zip(alist, blist): 
...  if key in res: 
...   res[key].append(val) 
...  else: 
...   res[key] = [val] 
... 
>>> res 
{u'Inner OD': [2, None, None, 1, 1, 1, 6, 1, 2, 4, 5, 5, 7, 1, 1, 2, 3, 4, 5, 1, None, 3, 4, 6], u'Outter OD': [3, 4, 5, 1, 3, 2, 2, 2, 2, 1, 1, 1, 1, 3, 4, 3, 5, 6, 5, 2, 3]} 

более подробная информация о встроенной функции zip in the doc

1

Еще одно решение. Он не делает ничего лучше, чем @ ответ Tryph (который не делает ничего лучше, чем @ ответ Gábor ЭРДЁШ), но я думаю, что с помощью defaultdict делает логику немного чище:

from collections import defaultdict 

res = defaultdict(list) 
for a, b in zip(alist, blist): 
    res[a].append(b) 

defaultdict ведет себя почти так же, как словарь, так вы можете, вероятно, просто использовать res выше для остальной части вашего кода; но, если хотите, вы можете превратить его в обычный словарь с

res = dict(res) 
Смежные вопросы