python字典值排序 [英] python dictionary values sorting
问题描述
我有2个字典,包含相同的键,但不同的键的值为 dict1
和 dict2
我想做的是每个字典,将值从最大到最小排序,然后给出每个值为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}
#按值排序将如下所示:
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的值会产生这个:
dict1 = {d:1,c:2,a:3,b:4,e:5}
dict2 = {c: 1,b:2,d:3,e:4,a:5}
#计算排名之间的差异将是这样的:
diffs = {}
for x in dict1.keys():
diffs [x] =(dict1 [x] - dict2 [x])
#diff将如下所示:
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}
/ pre>
dict2 = {a 1.4,b:7.7,c:9.0,d:2.5,e:2.0}
k1 = sorted(dict1,key = dict1.get)
k2 = dict2,key = dict2.get)
diffs = dict((k,k2.index(k) - k1.index(k))for dict1)
对于较大的分数,更有效率,更不易读的版本:
ranks1 = dict(map(reversed,enumerate(sorted(dict1,key = dict1.get))))
ranks2 = dict(map(revers,enumerate(sorted(dict2,key = dict2.get)) ))
diffs = dict((k,ranks2 [k] - ranks1 [k])for dict in)
I have 2 dictionaries,
dict1
anddict2
which contain the same keys, but different values for the keys. What I want to do is for each dictionary, sort the values from largest to smallest, and then give each value a rank 1-N, 1 being the largest value. From here, I want to get the difference of the ranks for the values in each dictionary for the same key. For example: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
I know dictionaries are meant to be random and not sortable, but maybe there is a method to put the keys and values into a list? The main challenges I am facing are getting the keys and values sorted by value (largest to smallest) and then changing the value to its respective rank in the sorted list.
解决方案A simple solution for small dicts is
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)
A more efficient, less readable version for larger dicts:
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字典值排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!