2013-03-01 50 views
9

我有兩個列表Lx和Ly,來自Lx的每個元素在Ly中都有相應的標籤。例如:根據其他列表中的標籤從列表中選擇元素

Lx = [[1,2,5], [5,2,7], [7,0,4], [9,2,0], [1,8,5], [3,4,5], [3,2,7], [2,9,7]] 
Ly = [A, C, A, B, A, B, C, C] 

如何輕鬆地得到一個列表/標籤,列表中的元素是來自Lx中具有相同標籤的Ly元素?那就是:

[[1,2,5], [7,0,4], [1,8,5]] 
[[5,2,7], [3,2,7], [2,9,7]] 
[[9,2,0], [3,4,5]] 

回答

7
Lx = [[1,2,5], [5,2,7], [7,0,4], [9,2,0], [1,8,5], [3,4,5], [3,2,7], [2,9,7]] 
Ly = ['A', 'C', 'A', 'B', 'A', 'B', 'C', 'C'] 
d = {} 
for x,y in zip(Lx,Ly): 
    d.setdefault(y, []).append(x) 

d現在是:

{'A': [[1, 2, 5], [7, 0, 4], [1, 8, 5]], 
'B': [[9, 2, 0], [3, 4, 5]], 
'C': [[5, 2, 7], [3, 2, 7], [2, 9, 7]]} 
+0

@shn如果你從集合中導入OrderedDict和d = OrderedDict(),d.values()中列表的順序反映了Ly中元素的順序 – eyquem 2013-03-01 14:20:41

1

下面將讓你相當接近:

from collections import defaultdict 

Lx = [[1,2,5], [5,2,7], [7,0,4], [9,2,0], [1,8,5], [3,4,5], [3,2,7], [2,9,7]] 
Ly = ['A', 'C', 'A', 'B', 'A', 'B', 'C', 'C'] 

d = defaultdict(list) 
for x, y in zip(Lx, Ly): 
    d[y].append(x) 
d = dict(d) 

print(d) 

這將產生

{'A': [[1, 2, 5], [7, 0, 4], [1, 8, 5]], 'C': [[5, 2, 7], [3, 2, 7], [2, 9, 7]], 'B': [[9, 2, 0], [3, 4, 5]]} 
相關問題