Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:集合。使用deque样式排序的计数器_Python_Counter_Deque - Fatal编程技术网

Python:集合。使用deque样式排序的计数器

Python:集合。使用deque样式排序的计数器,python,counter,deque,Python,Counter,Deque,我是一个相对较新的Python 3程序员。我需要一个数据结构,它似乎结合了collections.Counter、deque和set的功能,我希望有更多经验的人能够提出最具python风格的方法 我有一个稀疏的整数索引集合,需要维护与每个索引关联的计数,就像计数器一样。但我也希望在索引:计数对之间保留一个隐式排序,这样我就可以在不知道其索引的情况下删除最旧的一个,比如deque。最后,我希望能够方便地检查是否存在索引,如集合。最后,如果有必要,我想使用scypy.stats中的rv_discre

我是一个相对较新的Python 3程序员。我需要一个数据结构,它似乎结合了collections.Counter、deque和set的功能,我希望有更多经验的人能够提出最具python风格的方法

我有一个稀疏的整数索引集合,需要维护与每个索引关联的计数,就像计数器一样。但我也希望在索引:计数对之间保留一个隐式排序,这样我就可以在不知道其索引的情况下删除最旧的一个,比如deque。最后,我希望能够方便地检查是否存在索引,如集合。最后,如果有必要,我想使用scypy.stats中的rv_discrete来选择概率由计数加权的成员


非常感谢您的任何想法。

从您的描述来看,这听起来像是一个有序的计数器应该完成大部分工作。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)