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内置方式来执行此操作和/或更优化的版本?
如果你不介意使用熊猫:
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)