我有一个字典列表,它们按一个属性排序:
[{"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 dicts和finding closest value in a list of ints的答案,但我似乎无法找到答案,以便在一系列词汇中找到最接近的值。
编辑:我不是在问如何对dicts列表进行排序,我已经这样做了。我问如何找到包含最接近sortedProp
值的dict到给定值。
edit2:我使用的是十六进制数字(来自phash run的结果)作为sorted属性,因此'nearest'被定义为两个哈希之间的汉明距离。
答案 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))