Python:集合。使用deque样式排序的计数器
我是一个相对较新的Python 3程序员。我需要一个数据结构,它似乎结合了collections.Counter、deque和set的功能,我希望有更多经验的人能够提出最具python风格的方法 我有一个稀疏的整数索引集合,需要维护与每个索引关联的计数,就像计数器一样。但我也希望在索引:计数对之间保留一个隐式排序,这样我就可以在不知道其索引的情况下删除最旧的一个,比如deque。最后,我希望能够方便地检查是否存在索引,如集合。最后,如果有必要,我想使用scypy.stats中的rv_discrete来选择概率由计数加权的成员Python:集合。使用deque样式排序的计数器,python,counter,deque,Python,Counter,Deque,我是一个相对较新的Python 3程序员。我需要一个数据结构,它似乎结合了collections.Counter、deque和set的功能,我希望有更多经验的人能够提出最具python风格的方法 我有一个稀疏的整数索引集合,需要维护与每个索引关联的计数,就像计数器一样。但我也希望在索引:计数对之间保留一个隐式排序,这样我就可以在不知道其索引的情况下删除最旧的一个,比如deque。最后,我希望能够方便地检查是否存在索引,如集合。最后,如果有必要,我想使用scypy.stats中的rv_discre
非常感谢您的任何想法。从您的描述来看,这听起来像是一个有序的计数器应该完成大部分工作。OrderedDict跟踪插入顺序,计数器跟踪项目的频率 演示:
您可以使用oc.keys[0]获取第一个插入的密钥。从您的描述中,听起来像是一个有序计数器应该完成大部分工作。OrderedDict跟踪插入顺序,计数器跟踪项目的频率 演示:
您可以使用oc.keys[0]获得第一个插入的键。类OrderedCounter,OrderedDict:pass怎么样?@timgeb我不知道Python允许这样的多重继承。我在哪里可以在文档中读到更多关于这方面的内容?@AkshatMahajan是这样的:请看@AkshatMahajan Python确实允许多重继承,但一般来说,您不能这样组合类并期望它工作。这只是因为计数器和OrderedDict是如何实现的。OrderedCounter类,OrderedDict:pass怎么样?@timgeb我不知道Python允许这样的多重继承。我在哪里可以在文档中读到更多关于这方面的内容?@AkshatMahajan是这样的:请看@AkshatMahajan Python确实允许多重继承,但一般来说,您不能这样组合类并期望它工作。这仅仅是因为计数器和OrderedICT是如何实现的。
>>> from collections import OrderedDict, Counter
>>> class OrderedCounter(Counter, OrderedDict):
... pass
>>>
>>> oc = OrderedCounter()
>>> oc[0] = 5
>>> oc[2] = 27
>>> oc
OrderedCounter({2: 27, 0: 5})
>>> oc.update({2:1, 0:6, 7:1})
>>> oc
OrderedCounter({2: 28, 0: 11, 7: 1})
>>> oc.popitem()
(7, 1)
>>> oc.popitem()
(2, 28)
>>> oc.popitem()
(0, 11)