在排序的词典列表中查找最近的项目

时间:2016-09-19 23:03:35

标签: python list dictionary

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

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

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

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

edit2:我使用的是十六进制数字(来自phash run的结果)作为sorted属性,因此'nearest'被定义为两个哈希之间的汉明距离。

1 个答案:

答案 0 :(得分: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))