假设我有一些数据如下所示。
Lucy = 1
Bob = 5
Jim = 40
Susan = 6
Lucy = 2
Bob = 30
Harold = 6
我想结合:
- 删除重复的键,和
- 添加这些重复键的值。
这意味着我会得到键/值:
Lucy = 3
Bob = 35
Jim = 40
Susan = 6
Harold = 6
为此使用(来自集合中的)计数器或默认字典会更好吗?
原文由 covariance 发布,翻译遵循 CC BY-SA 4.0 许可协议
假设我有一些数据如下所示。
Lucy = 1
Bob = 5
Jim = 40
Susan = 6
Lucy = 2
Bob = 30
Harold = 6
我想结合:
这意味着我会得到键/值:
Lucy = 3
Bob = 35
Jim = 40
Susan = 6
Harold = 6
为此使用(来自集合中的)计数器或默认字典会更好吗?
原文由 covariance 发布,翻译遵循 CC BY-SA 4.0 许可协议
defaultdict(int)
似乎工作得更快。
In [1]: from collections import Counter, defaultdict
In [2]: def test_counter():
...: c = Counter()
...: for i in range(10000):
...: c[i] += 1
...:
In [3]: def test_defaultdict():
...: d = defaultdict(int)
...: for i in range(10000):
...: d[i] += 1
...:
In [4]: %timeit test_counter()
5.28 ms ± 1.2 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [5]: %timeit test_defaultdict()
2.31 ms ± 68.1 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
原文由 ImPerat0R_ 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
Counter
和defaultdict(int)
都可以在这里正常工作,但它们之间几乎没有区别:Counter
支持您可以在 多重集 上执行的大部分操作。因此,如果您想使用这些操作,请选择 Counter。Counter
查询丢失的键时不会向字典添加新键。因此,如果您的查询包含字典中可能不存在的键,那么最好使用Counter
。例子:
例子:
Counter
还有一个名为most_common
的方法允许您按项目的数量对项目进行排序。要在defaultdict
中获得相同的内容,您必须使用sorted
。例子:
Counter
还允许您从 Counter 对象创建元素列表。例子:
因此,根据您要对结果字典执行的操作,您可以在
Counter
和defaultdict(int)
之间进行选择。