2016-07-08 78 views
3

比方說,我有一個Python 2D名單:如何統計Python列表中唯一出現的多個唯一事件?

mylist = [["A", "X"],["A", "X"],["A", "Y"],["B", "X"],["B", "X"],["A", "Y"]] 

在這種情況下我的「鑰匙」將是每個陣列(「A」或「B」)和我的「價值」的第一要素是第二個元素(「X」或「Y」)。在我的盤整結束輸出應鞏固鍵和計數值的獨特目前出現的每個關鍵,即是這樣的:

# Output 
# {"A":{"X":2, "Y":2}, "B":{"X":2, "Y":1}} 

我試圖使用Python的itertools.groupby,但無濟於事。類似於this question。如果你有更好的方法,請告訴我。

謝謝!

回答

12

我認爲這樣做最簡單的方法是用計數器和defaultdict:

from collections import defaultdict, Counter 

output = defaultdict(Counter) 
for a, b in mylist: 
    output[a][b] += 1 
+1

特別是,'groupby'要求對輸入進行排序。這是最好的方法。 –

+1

您可以添加如何獲得沒有出現的元素的數量? –

+0

簡單而高效,謝謝! –

1

L3viathan的答案似乎是更好的。但是,這是另一種方法:

mylist = [["A", "X"],["A", "X"],["A", "Y"],["B", "X"],["B", "X"],["A", "Y"]] 

dictionary = {"A": {"X": 0, "Y": 0}, "B": {"X": 0, "Y": 0}} 
for x in mylist: 
    dictionary[x[0]][x[1]] += 1