2015-10-06 76 views
0

可以說我有列表這樣如何保持python字典排序?

x = ["foo", "foo", "bar", "baz", "foo", "bar"] 

,我想指望在一個字典每次出現的號碼,但我希望當我通過列表循環命令他們。就像這樣:

from collections import defaultdict 
ordered_dict = defaultdict(lambda: 0, {}) 
for line in x: 
    ordered_dict[line] += 1 

我想要的結果是這樣的:

{"foo":3, "bar":2, "baz":1} 

我不知道是否有某種方式來保持,而我循環下令字典。目前我使用heapq循環後

+2

字典是沒有順序的,*由於其本身的性質*。你有一個名爲'ordered_dict'的東西,但它並沒有實際排序(它不是'collections.OrderedDict')。請注意,您可以使用'collections.Counter'; 'Counter(x).most_common()'會派上用場...... – jonrsharpe

回答

0

基本上,你只是使用了錯誤的收集從collections

>>> from collections import Counter, OrderedDict 
>>> OrderedDict(Counter(["foo", "foo", "bar", "baz", "foo", "bar"]).most_common()) 
OrderedDict([('foo', 3), ('bar', 2), ('baz', 1)]) 
0

代碼:

x = ["foo", "foo", "bar", "baz", "foo", "bar"] 
d = {} 
for item in x: 
    d[item] = d.get(item,0) + 1 
print(d) 

輸出:

{'bar': 2, 'baz': 1, 'foo': 3}