假设我有这样的列表
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
答案 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}