最快的方法来获得最接近1在Python中的字典键

问题描述:

您好我想问这是否最快,并采取最少的资源方式来获得最接近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

这应该这样做

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

注:

  1. 此方法适用于列表作为井

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

这是我会怎么做:

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

我,让数量和1之间的距离的关键项目进行排序。 (abs(1-x1))。因此,第一项是最接近1的值。你可以使用min()作为GáborErdős的答案,但是如果你想知道整个订单,请使用这个。