【发布时间】: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 dicts 和 finding 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