2017-10-06 38 views
0

我有以下列表:Python中,聚集兩列數爲

a = [['A','R.1',1],['B','R.2',1],['B','R.2',2],['C','R.2',3], 
    ['C','C.1',4],['C','C.1',5],['A','C.1',8],['B','C.1',9], 
    ['B','C.1',1],['A','R.3',2],['C','R.1',3],['A','R.2',4], 
    ['C','R.1',5],['A','R.1',1],['C','R.2',5],['A','R.1',8]] 

我需要以某種方式組它產生以下結果:

[['A', 'C.1', 1], 
['A', 'R.1', 3], 
['A', 'R.2', 1], 
['A', 'R.3', 1], 
['B', 'C.1', 2], 
['B', 'R.2', 2], 
['C', 'C.1', 2], 
['C', 'R.1', 2], 
['C', 'R.2', 2]] 

其中第三列是行數第一列和第二列匹配。 從原始列表中,第三列的值可以忽略不計。

我已經嘗試通過「for」嵌套和「列表理解」,但我一直未能拿出任何結果。

有沒有人有任何線索我可以解決這個問題?

+0

哪裏是你的企圖?讓我們與您已經嘗試過的內容一起工作,以便我們可以將解決方案保持在您感覺舒適的地方。 – Prune

回答

1

隨着collections.defaultdict對象:

import collections 

a = [['A','R.1',1],['B','R.2',1],['B','R.2',2],['C','R.2',3], 
    ['C','C.1',4],['C','C.1',5],['A','C.1',8],['B','C.1',9], 
    ['B','C.1',1],['A','R.3',2],['C','R.1',3],['A','R.2',4], 
    ['C','R.1',5],['A','R.1',1],['C','R.2',5],['A','R.1',8]] 

d = collections.defaultdict(int) 
for l in a: 
    d[(l[0],l[1])] += 1 

result = [list(k)+[v] for k,v in sorted(d.items())] 
print(result) 

輸出:

[['A', 'C.1', 1], ['A', 'R.1', 3], ['A', 'R.2', 1], ['A', 'R.3', 1], ['B', 'C.1', 2], ['B', 'R.2', 2], ['C', 'C.1', 2], ['C', 'R.1', 2], ['C', 'R.2', 2]] 

只是爲了 「漂亮」 的打印:

import pprint 
... 
pprint.pprint(result) 

輸出:

[['A', 'C.1', 1], 
['A', 'R.1', 3], 
['A', 'R.2', 1], 
['A', 'R.3', 1], 
['B', 'C.1', 2], 
['B', 'R.2', 2], 
['C', 'C.1', 2], 
['C', 'R.1', 2], 
['C', 'R.2', 2]] 
0

到@RomanPerekhrest類似,我用了一個Counter

from collections import Counter 

a = [['A','R.1',1],['B','R.2',1],['B','R.2',2],['C','R.2',3], 
    ['C','C.1',4],['C','C.1',5],['A','C.1',8],['B','C.1',9], 
    ['B','C.1',1],['A','R.3',2],['C','R.1',3],['A','R.2',4], 
    ['C','R.1',5],['A','R.1',1],['C','R.2',5],['A','R.1',8]] 

def transform(table): 
    c = Counter(map(lambda c: tuple(c[:-1]), table)) 
    return sorted(map(lambda p: list(p[0]) + [p[1]], c.items())) 

print(transform(a))