【发布时间】:2017-10-05 02:50:21
【问题描述】:
如果我有一系列 (key, value) 对,我可以像这样快速初始化一个字典:
>>> data = [ ('a', 1), ('b', 2) ]
>>> dict(data)
{'a': 1, 'b': 2}
我想对 Counter 字典做同样的事情;但如何?构造函数和update() 方法都将有序对视为键,而不是键值对:
>>> from collections import Counter
>>> Counter(data)
Counter({('a', 1): 1, ('b', 2): 1})
我能做到的最好的办法是使用一个临时字典,它既丑陋又不必要地迂回:
>>> Counter(dict(data))
Counter({'b': 2, 'a': 1})
有没有合适的方法从(key, count) 对的列表中直接初始化Counter?我的用例涉及从文件中读取大量保存的计数(使用唯一键)。
【问题讨论】:
-
"显式优于隐式。"为什么您的列表应该与其他可迭代对象区别对待,因为它的形式可以转换为
dict? -
我不要特殊处理,我要不同的初始化路径。
-
如果您真的在处理“大量保存的文件计数”,您可能应该使用
pandas或numpy(结构化数组)。我不知道我们在这里讨论的是什么大小,但在某些时候,同构数组的内存优势(以及特定于 dtype 的操作实现)会派上用场。
标签: python python-3.x data-structures counter python-internals