2014-05-19 24 views
0

例如,在這裏我需要計算單詞出現在列表中的次數,但不按頻率排序,但其順序與它們出現的順序相似。如何獲得物品的字典,但保持它們出現的順序?

from collections import Counter 
words = ["oranges", "apples", "apples", "bananas", "kiwis", "kiwis", "apples"] 
c = Counter(words) 
print(c) 

所以不是:{'apples': 3, 'kiwis': 2, 'bananas': 1, 'oranges': 1}

我寧願得到:{'oranges': 1, 'apples': 3, 'bananas': 1, 'kiwis': 2 }

而且我並不真的需要這個「反」的方法,任何方式,將產生正確的結果是正常的我。

回答

6

您可以使用使用recipecollections.Countercollections.OrderedDict

from collections import Counter, OrderedDict 

class OrderedCounter(Counter, OrderedDict): 
    'Counter that remembers the order elements are first encountered' 

    def __repr__(self): 
     return '%s(%r)' % (self.__class__.__name__, OrderedDict(self)) 

    def __reduce__(self): 
     return self.__class__, (OrderedDict(self),) 

words = ["oranges", "apples", "apples", "bananas", "kiwis", "kiwis", "apples"] 
c = OrderedCounter(words) 
print(c) 
# OrderedCounter(OrderedDict([('oranges', 1), ('apples', 3), ('bananas', 1), ('kiwis', 2)])) 
相關問題