2016-08-24 53 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áborErdős – Snowman08

+0

不客气!如果是,请标记答案正确:) –

0

它无非是@的Gabor鄂尔多斯的回答更好,但我认为这是一个有点清晰:

>>> 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的答案更好(这什么都不做比@的Gabor鄂尔多斯的回答更好),但我想用defaultdict使得逻辑有点清洁:

from collections import defaultdict 

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

一个defaultdict行为几乎相同的字典,所以你可以在你的代码中使用上面的res;但是,如果你愿意,你可以把它变成一个普通的字典与

res = dict(res) 
相关问题