簡體   English   中英

Python 中的自定義字典查找

[英]Custom dictionary lookup in Python

如果我有這樣的字典

>>> d = {10: 3, 100: 2, 1000: 1}

我可以輸入如下內容:

>>> d.get(10), d.get(100), d.get(1000)
(3, 2, 1)

雖然我希望如果沒有找到給定的鍵,則返回與給定鍵最近的鍵對應的值:

>>> d.get(20), d.get(60), d.get(200)
(3, 2, 2)

相反,Python 中的結果是

(None, None, None)

實現我描述的行為的 Pythonic 方式是什么?

謝謝

您可以從dict派生以更改get()方法的行為:

class ClosestDict(dict):
    def get(self, key):
        key = min(self.iterkeys(), key=lambda x: abs(x - key))
        return dict.get(self, key)

d = ClosestDict({10: 3, 100: 2, 1000: 1})
print (d.get(20), d.get(60), d.get(200))

印刷

(3, 2, 2)

請注意, get()的復雜度不再是 O(1),而是 O(n)。

bisect模塊允許在排序列表中快速查找插入 position。

from bisect import bisect_right

def closest_matches(data, query):
    keys = sorted(data)
    return [data[i] for i in (min(map(abs, (keys[p-1], keys[p]))) for p in (bisect_right(keys, k) for k in query))]

>>> d = {10: 3, 100: 2, 1000: 1}
>>> closest_matches(d, [20, 60, 200])
[3, 3, 2]

簽出這個食譜模糊匹配字典

暫無
暫無

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

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