假設我想存盤鍵值代表下限的有序值。像這個例子:
d = {1: "pear", 4: "banana", 7: "orange"}
我可以通過 訪問第一個物件d[1]。假設我想存盤它,以便我可以"pear"通過呼叫[1,4). 如果我輸入任何"keyvalue"與[4,7)我想"banana"歸還。python中是否有任何型別的資料結構?我找到了intervalTrees,但它看起來比我想要的要先進一些。在intervalTrees作為鍵的間隔中,可以重疊,我不希望那樣。或者它可能不是我想要的任何型別的字典,因為您可以在一個字典中混合資料型別作為鍵。你怎么認為?
編輯:從我得到的提示來看,這將是一個作業代碼:
import bisect
d = [(1, "pear"), (4, "banana"), (7,"orange") ]
keys = [j[0] for j in d]
for v in range(1,10):
print("Using input ", v)
i = bisect.bisect(keys, v) - 1
out = d[i]
print(out)
print("")
# Or using SortedDict
from sortedcontainers import SortedDict
d2 = SortedDict()
d2[1] = 'pear'
d2[4] = 'banana'
d2[7] = 'orange'
for v in range(1,10):
print("Using input ", v)
i = bisect.bisect(d2.keys(), v) - 1
j = d2.keys()[i]
out = d2[j]
print(out)
print("")
uj5u.com熱心網友回復:
您要查找的資料結構是二叉搜索樹 (BST),最好是平衡的 BST。你的字典鍵是 BST 的鍵,每個節點只有一個額外的欄位來存盤相應的值。然后您的查找只是鍵上的下限/二等分。查找紅黑樹或 AVL 樹的 Python 實作會回傳許多可能的包。
沒有用于始終排序資料的內置庫。如果您永遠不需要添加或洗掉鍵,您可以在排序串列中使用bisect和 (key, value) 元組。
對于允許修改的純 Python 實作,我建議從SortedContainers 庫中查看 SortedDict 。它被構建為 BST 的直接替代品,非常有用和經過測驗,并聲稱在記憶體和速度合理大小的資料集上優于基于指標的 BST(但沒有與 BST 相同的漸近保證)。您還可以提供自定義鍵來比較不同型別的物件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/322849.html
下一篇:如何減少嵌套字典值
