【问题标题】:Quickest way to get dictionary key that is closest to 1 in Python在Python中获取最接近1的字典键的最快方法
【发布时间】:2016-03-11 13:26:28
【问题描述】:

您好,我想问一下这是否是最快且占用资源最少的方法来获得最接近字典中 1 的值,或者有更好、更有效的方法。

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

【问题讨论】:

  • 从来没有见过任何其他的原生方式,所以有过的人必须猛扑过去,挽救局面。但是您是否考虑过扩展您的sorted() 逻辑?做一个手册for key, val in dct.items(): 并在找到完全匹配时打破?或者如果可能的话反转字典?让整数为键,字母为值,如果有可能,您可以获取dct[1]。否则,您始终可以使用from collections import OrderedDict 并按数量级保存它们。或者一个简单的预排序列表,您可以在其中执行scores[-1] 并获得最高?
  • @Torxed 我可以用值交换键,但不能保证我总是得到 1(这就是为什么我想对值进行排序,然后将最接近的值弹出到 1。

标签: python dictionary key sorted


【解决方案1】:

我会这样做:

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

我使用给出数字和1 之间距离的键对项目进行排序。 (abs(1-x1))。因此,第一项是最接近1 的值。您可以使用 Gábor Erdős 的回答中的 min(),但如果您想了解整个订单,请使用它。

【讨论】:

    【解决方案2】:

    应该这样做

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

    注意事项:

    1. 此方法也适用于列表

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-11
      • 2010-11-21
      • 1970-01-01
      • 2011-05-08
      • 2022-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多