我如何保持python字典排序?

时间:2015-10-06 21:56:56

标签: python dictionary

假设我有这样的列表

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

并且我想计算dict中每次出现的次数,但我希望它们在循环列表时排序。像这样:

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

我希望结果是这样的:

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

我想知道在循环时是否有一些方法可以保持字典顺序。目前我在循环后使用 heapq

3 个答案:

答案 0 :(得分:3)

你需要一个带有“反向”选项的OrderedDict。您使用的是defaultdict。这些都没有按设计排序。

https://docs.python.org/dev/library/collections.html#collections.OrderedDict

OrderedDict通常按键插入排序。如果您希望按值排序字典,您可能需要使用计数器,然后将这些条目插入到OrderedDict中。

答案 1 :(得分:0)

基本上,您刚使用了来自collections的错误集合:

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

答案 2 :(得分: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}