2016-03-11 71 views
1

您好我想問這是否最快,並採取最少的資源方式來獲得最接近1字典中的值或有更好,更有效的方式這個。最快的方法來獲得最接近1在Python中的字典鍵

import operator 

dct = {"a": 0.1, "b": 0.2, "c": 0.7, "d": 1, "e": 0.5} 

sorted_orders = sorted(dct.items(), key=operator.itemgetter(1)) 
sorted_orders = str(sorted_orders.pop()[:1]) 
a = len(sorted_orders) - 3 
sorted_orders = sorted_orders[2:a] 
print sorted_orders 

所需的輸出是1這裏的關鍵最接近的內容: d

+1

從來沒有見過任何其他的方式來做到這一點本地,所以有誰必須趁勢撲救。但是你有沒有考慮擴展你的'sorted()'邏輯?在dct.items()中做一個手工'for key,val:',並且在你找到完全匹配的時候破壞它?或者如果可能的話反轉字典?讓整數爲關鍵字,字母爲值,如果可能的話,你可以獲取'dct [1]'。否則,您總是可以使用'from OrderedDict集合中'並將它們保存在數量級中。或者是一個簡單的預先排序的列表,你可以做'分數[-1]'並獲得最高分數? – Torxed

+0

@Torxed我可以用鍵交換值,但不能保證我總是會得到1(這就是爲什麼我想排序值,然後彈出最接近1的值。 – Gunnm

回答

0

這應該這樣做

min(list(dct.values()), key=lambda x: abs(x - 1)) 

注:

  1. 此方法適用於列表作爲井

  2. 這不是最有效的 方式。更快的方法是使用bisect

1

這是我會怎麼做:

closest = sorted(dct.values(), key=lambda x: abs(1-x))[0] 

我,讓數量和1之間的距離的關鍵項目進行排序。 (abs(1-x1))。因此,第一項是最接近1的值。你可以使用min()作爲GáborErdős的答案,但是如果你想知道整個訂單,請使用這個。

相關問題