2016-08-24 4 views
0

これらの2つのリストを組み合わせて、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

それは、@ガーボルオルドスの答えよりも良い何もしませんが、私はそれが少し明確だと思う:

>>> 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]} 

ジップ内蔵機能の詳細についてはin the doc

1

さらに別の解決策。それは(@ガーボルオルドスの答えよりも良い何もしない)Tryphの答え@よりも良いが、私はdefaultdictを使用して、論理ビットクリーナーを作ると思う何もない:

from collections import defaultdict 

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

defaultdictので、ほとんどの辞書と同じように動作しませんおそらくコードの残りの部分に上記のresを使用するだけです。あなたが望むのであれば、通常の辞書にすることができます。

res = dict(res) 
関連する問題