【问题标题】:Find closest item in a sorted List of Dictionaries在已排序的字典列表中查找最近的项目
【发布时间】:2017-09-05 16:06:23
【问题描述】:

我有一个字典列表,它们按一个属性排序:

[{"name":"efi", "sortedProp":"01df"},
 {"name":"abe", "sortedProp":"1de9"},
 {"name":"bit", "sortedProp":"e182"}...]

我想找到最接近给定值的sortedProp 值(例如1dff 应该在此处返回第二个字典)。我知道我可以为此使用 bisect 以获得最佳速度(性能很重要,因为列表长约 30,000 个),并且我找到了 finding exact values in a list of dictsfinding closest value in a list of ints 的答案,但我似乎无法在字典列表中找到最接近的值的答案。

编辑:我不是在问如何对字典列表进行排序,我已经这样做了。我在问如何找到包含最接近给定值的sortedProp 值的字典。

edit2:我使用十六进制数字(来自 phash 运行的结果)作为排序属性,因此“最接近”定义为两个哈希之间的汉明距离。

【问题讨论】:

  • @wim 没什么,我只是不知道如何在字典列表中使用它。我发现它正在寻找一个接近值(不是完全匹配)的唯一示例使用整数列表。
  • 您是在检查多个值还是只检查一个?
  • @IronWaffleMan,汉明距离和十六进制值是两个不同的东西,min(l, key=lambda d: abs(int(d["sortedProp"], 16) - int("somhex", 16)))min(l, key=lambda d: distance.hamming(d["sortedProp"], "somehex")) 可能会给出完全不同的结果
  • @IronWaffleMan 啊,那么特别的东西。无论如何,我看不出如何对它们进行有意义的汉明距离排序,除非针对特定目标对它们进行排序,这当然是没有意义的,因为这样你就可以立即搜索最接近该目标的对象。

标签: python list dictionary


【解决方案1】:
def takeClosestEx(myList, myNumber):
    """
    Assumes myList is not sorted. Returns closest value to myNumber.
    """

    return min(myList, key=lambda x:abs(int(x["sortedProp"], 16)-myNumber))

【讨论】:

  • 您能详细说明一下答案吗? :-)
猜你喜欢
  • 2015-07-26
  • 1970-01-01
  • 1970-01-01
  • 2012-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-23
相关资源
最近更新 更多