python字典值排序 [英] python dictionary values sorting

查看:112
本文介绍了python字典值排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有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} 
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)
/ pre>

对于较大的分数,更有效率,更不易读的版本:

  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 and dict2 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆