找到其值最接近某个值的k个dict项

Bas*_*asj 1 python sorting dictionary nearest-neighbor

假设我们想找到两个值最接近10的项:

A = {'abc': 12.3, 'def': 17.3, 'dsfsf': 18, 'ppp': 3.2, "jlkljkjlk": 9.23}
Run Code Online (Sandbox Code Playgroud)

它适用于:

def nearest(D, centre, k=10):
    return sorted([[d, D[d], abs(D[d] - centre)] for d in D], key=lambda e: e[2])[:k]

print(nearest(A, centre=10, k=2))
Run Code Online (Sandbox Code Playgroud)

[['jlkljkjlk',9.23,0.7699999999999996],['abc',12.3,2.3000000000000007]]

但是当dict具有更大的尺寸(数十万个项目)时,是否有Python内置方式来执行此操作和/或更优化的版本?

DYZ*_*DYZ 7

如果你不介意使用熊猫:

import pandas as pd
closest = (pd.Series(A) - 10).abs().sort_values()[:2]
#jlkljkjlk    0.77
#abc          2.30
closest.to_dict()
#{'jlkljkjlk': 0.7699999999999996, 'abc': 2.3000000000000007}
Run Code Online (Sandbox Code Playgroud)