Python中最有效的对值数据结构,支持重复和排序?

Python中最有效的对值数据结构,支持重复和排序?,python,data-structures,Python,Data Structures,Python中支持重复项和排序的最有效的对值数据结构是什么 我需要一个类似字典的结构,但它必须支持重复项,我正在寻找一个可以根据每对的第一个值快速排序的解决方案。使用模块保留一个排序列表。使用列表数据,对于每对新的(a,b),数据。在对分(data,(a,LARGE_NUMBER))返回的索引处插入,在以a开头的所有现有条目之后添加新条目。列表始终按排序顺序维护,因此您不必担心“排序快” 您能否澄清“支持重复项”的含义?听起来好像你只是想要一个元组列表。。。(尽管在这种情况下查找不会有效率。)是

Python中支持重复项和排序的最有效的对值数据结构是什么


我需要一个类似字典的结构,但它必须支持重复项,我正在寻找一个可以根据每对的第一个值快速排序的解决方案。

使用模块保留一个排序列表。使用列表
数据
,对于每对新的
(a,b)
数据。在
对分(data,(a,LARGE_NUMBER))
返回的索引处插入
,在以
a
开头的所有现有条目之后添加新条目。列表始终按排序顺序维护,因此您不必担心“排序快”


您能否澄清“支持重复项”的含义?听起来好像你只是想要一个元组列表。。。(尽管在这种情况下查找不会有效率。)是的,这是一个愚蠢的问题。我现在正在使用元组列表,我不需要执行查找,但我想知道是否有类似于字典的接口(即:在本例中仅检索键或第一个值)。这根本不是一个愚蠢的问题!我只是不太清楚我第一次读它的时候你在问什么。太好了!另一方面,排序比在任意索引处插入快。这取决于OP的用例,但如果OP需要序列始终处于排序状态,则在最后(或在每批
append
s之后)构建并排序可能更有意义。谢谢!方法
对分.insort
适合我的需要。对于我的用户案例,它比排序更有效,因为我必须执行多个插入操作,操作必须排序的列表,执行更多插入操作并再次排序。
bisect.insort
还将根据对的第二个值进行排序,您指出这对排序不重要。这就是为什么我没有用它。但你比我更清楚你的要求!
>>> from bisect import bisect
>>> from random import randint
>>> data = []
>>> for x in range(20):
...   a,b = randint(1,10),randint(1,100)
...   data.insert(bisect(data,(a,1000)),(a,b))
...
>>> for d in data: print (d)
...
(1, 67)
(1, 85)
(1, 38)
(2, 78)
(3, 57)
(3, 37)
(4, 76)
(4, 74)
(5, 47)
(5, 24)
(5, 59)
(5, 91)
(6, 85)
(6, 41)
(7, 18)
(7, 41)
(7, 24)
(9, 48)
(9, 77)
(9, 82)
(10, 80)