2014-07-17 41 views
0

所以基本上我想每一個獨特的對象是一個關鍵,我想對應的值是在列表中出現該對象的次數......創建一個將對象映射到列表中出現的次數的字典?在Python

What I have: [obj1, obj2, obj2, obj2, obj3, obj4, obj4] 
What I want: {obj1 : 1, obj2 : 3, obj3 : 1, obj4 : 2} 

我知道我會怎麼做使用for循環,但是有更好的方法還是使用理解或其他方法的pythonic方法?謝謝!

+0

請注意,您需要在您的列表中的所有對象,這是哈希的到工作... –

回答

4

collections.Counter被明確爲這個任務設計:

from collections import Counter 
lst = [obj1, obj2, obj2, obj2, obj3, obj4, obj4] 
counter = Counter(lst) 

下面是一個演示:

>>> from collections import Counter 
>>> lst = [1, 2, 2, 2, 3, 4, 4] 
>>> counter = Counter(lst) 
>>> counter 
Counter({2: 3, 4: 2, 1: 1, 3: 1}) 
>>> counter[1] 
1 
>>> counter[2] 
3 
>>> counter[3] 
1 
>>> counter[4] 
2 
>>> 
0
>>> l = [1, 2, 2, 2, 3, 4, 4] 
>>> s = set(l) # s is now set([1,2,3,4]) 
>>> {i: l.count(i) for i in s} 
{1: 1, 2: 3, 3: 1, 4: 2} 
相關問題