從 Python 3.7 開始,字典是有序的。那么為什么我不能通過索引獲取鍵呢?
uj5u.com熱心網友回復:
構建這樣的 API 將是一個“令人討厭的麻煩”:實作不能有效地支持它,所以最好不要誘使人們使用不適當的資料結構。
出于同樣的原因,例如,鏈表很少提供索引 API。這也是完全有序的,但是沒有有效的方法來找到i任意的 'th 元素i。您必須從頭開始,然后i依次按照鏈接找到i'th。
CPython dict 的最終結果相同。它不使用鏈表,但最終還是一樣:它在封面下使用平面向量,但基本上任何數量的向量條目都可以是“孔”。沒有辦法跳過每個條目,一次一個。人們期望a[i]花費O(1)(恒定的)時間,而不是O(i)時間。
uj5u.com熱心網友回復:
如果您真的迫切需要此功能,這里有一個解決方法:
In [2]: d
Out[2]: {'a': 'A', 'b': 'B', 'c': 'C'}
In [3]: indexed_keys = dict(enumerate(d.keys()))
In [4]: d[indexed_keys[1]]
Out[4]: 'B'
字典本身也是如此keys,但其鍵值直接對應于鍵所在的“索引” d。所以在索引處獲取密鑰i仍然是O(1). 現在,您使用兩個O(1)查找來獲取與原始字典中鍵的“索引”關聯的值。
如果您的原始字典的鍵與其列舉發生沖突,這顯然不起作用,但如果發生這種情況,您需要解決更大的問題——比如選擇更合適的資料結構。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/450109.html
標籤:python-3.x 字典
