2 回答

TA貢獻(xiàn)1808條經(jīng)驗(yàn) 獲得超4個(gè)贊
您可以將 dict 過濾為僅包含在sig_letters
且值不等于查詢值的條目。使用理解,然后使用min
with aabs
作為關(guān)鍵函數(shù)來查找感興趣的字典條目:
>>> x=5000 >>> min({k:v for k,v in val_dict.items() if k in sig_letters and v!=x}.items(), key=lambda e: abs(x-e[1])) ('k', 5002)
在 Python 3.x 中,.items()
是一個(gè)動(dòng)態(tài)的字典視圖對(duì)象。隨著基礎(chǔ)字典的變化,它是快速和更新的。
如果您使用的是 Python 2.7,請(qǐng)使用.viewitems()而不是 items() (并考慮更新到 Python 3.x ...)

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超5個(gè)贊
看起來所有三個(gè)集合都已排序(在字典的情況下,'a' 的值總是小于 'b' 的值,依此類推)。這讓事情變得非常簡單 - 看看字母的兩邊sig_letters
def absolute_difference(a: int, b: int) -> int:
return a - b if a > b else b - a
def nearest(val: int) -> str:
global val_list, val_dict, sig_letters
exact_key = None
# Find the corresponding key in val_dict (catch not found)
for key, value in val_dict.items():
if value == val:
exact_key = key
# Find exact_key's index in sig_letters (catch ValueError)
exact_index = sig_letters.index(exact_key)
# Get values to left and right (catch out of bounds)
left = sig_letters[exact_index-1]
right = sig_letters[exact_index+1]
left_val = val_dict[left]
right_val = val_dict[right]
if absolute_difference(left_val, val) < absolute_difference(right_val, value):
return left
else:
return right
添加回答
舉報(bào)