簡體   English   中英

Python支持排序字典 - 類似於C ++映射?

[英]Python support sorted dictionary — similar to C++ map?

我使用的是Python 2.7.x. 我有一個字典(我的意思是{} ),鍵是int,值是字符串。 我想檢索具有最小整數值的鍵。 在C ++中,我認為我們可以使用map,它對鍵進行排序。 在Python中,不確定我們是否可以利用類似的東西? 如果我的理解是正確的,Python字典(我的意思是{} )不按鍵排序。

林先生,提前謝謝

更新

當在字典中找到最小密鑰時,OP表示需要O(1)性能。 嘗試sortedcontainers模塊。 它提供了一個SortedDict類:

>>> from sortedcontainers import SortedDict
>>> d = SortedDict({100: 'a', 27: 'b', 1234: 'c'})
>>> d.keys()
SortedSet([27, 100, 1234], key=None, load=1000)
>>> d.keys()[0]
27
>>> d[d.keys()[0]]
'b'

對於Python內置字典,您可以使用min(d)查找最低密鑰:

>>> d = {100: 'a', 27: 'b', 1234: 'c'}
>>> print(d)
{1234: 'c', 27: 'b', 100: 'a'}
>>> print(min(d))
27
>>> print(d[min(d)])
b

在Python中,字典由哈希表在內部表示,因此您無法以排序順序本機地返回鍵。 您可以使用sorted(d.keys())以排序順序返回鍵列表。 如果對鍵進行預排序,也可以使用collections.OrderedDict 如果您不知道密鑰的順序,並且需要在插入值時按排序順序維護密鑰,則可以查看此庫以獲取SortedDict類型。

建立@mhawke的答案,你可以簡單地做到:

d = {1 : "a", 2 : "b", 3 : "c" }
print d[min(d.keys())] # => 'a'

Python中有二叉樹實現:

https://pypi.python.org/pypi/bintrees/2.0.2

您也可以使用blist.sorteddict

您還可以使用內置的bisect模塊來維護元組的排序列表。

如果您關心的只是找到最小值而您實際上並不關心維護排序,則可以使用內置的heapq模塊來維護最小堆數據結構,從而可以持續訪問最小元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM