gpt4 book ai didi

python字典值排序

转载 作者:太空狗 更新时间:2023-10-29 20:11:41 24 4
gpt4 key购买 nike

我有 2 个字典,dict1dict2,它们包含相同的键,但键的值不同。我想要做的是对每个字典,将值从最大到最小排序,然后给每个值一个 1-N 的等级,1 是最大值。从这里,我想获得每个字典中相同键值的排名差异。例如:

dict1 = {a:0.6, b:0.3, c:0.9, d:1.2, e:0.2}
dict2 = {a:1.4, b:7.7, c:9.0, d:2.5, e:2.0}

# sorting by values would look like this:
dict1 = {d:1.2, c:0.9, a:0.6, b:0.3, e:0.2}
dict2 = {c:9.0, b:7.7, d:2.5, e:2.0, a:1.4}

#ranking the values would produce this:
dict1 = {d:1, c:2, a:3, b:4, e:5}
dict2 = {c:1, b:2, d:3, e:4, a:5}

#computing the difference between ranks would be something like this:
diffs = {}
for x in dict1.keys():
diffs[x] = (dict1[x] - dict2[x])

#diffs would look like this:
diffs[a] = -2
diffs[b] = 2
diffs[c] = 1
diffs[d] = -2
diffs[e] = 1

我知道字典是随机的,不可排序,但也许有一种方法可以将键和值放入列表中?我面临的主要挑战是按值(从大到小)对键和值进行排序,然后将值更改为其在排序列表中的相应排名。

最佳答案

一个针对小型字典的简单解决方案是

dict1 = {"a":0.6, "b":0.3, "c":0.9, "d":1.2, "e":0.2}
dict2 = {"a":1.4, "b":7.7, "c":9.0, "d":2.5, "e":2.0}
k1 = sorted(dict1, key=dict1.get)
k2 = sorted(dict2, key=dict2.get)
diffs = dict((k, k2.index(k) - k1.index(k)) for k in dict1)

一个更高效、可读性更差的版本,适用于更大的字典:

ranks1 = dict(map(reversed, enumerate(sorted(dict1, key=dict1.get))))
ranks2 = dict(map(reversed, enumerate(sorted(dict2, key=dict2.get))))
diffs = dict((k, ranks2[k] - ranks1[k]) for k in dict1)

关于python字典值排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6046049/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com