如何有效地对二维字典进行排序 字典是这样的,我需要根据其值键对每个键进行排名,最高值获得最低排名。如果2个键具有相同的值,则它们按字典顺序排序:
d = {'T': 1500, 'L': 1000, 'P': 1500, 'G': 6500, 'B': 7000}
预期产出:
1 : B
2 : G
3 : P
3 : T
4 : L
这里由于重复了T和P的值,所以它们按字母顺序排序
答案 0 :(得分:3)
首先按键排序,然后按降序值排序:
>>> d = {'T': 1500, 'L': 1000, 'P': 1500, 'G': 6500, 'B': 7000}
>>> sorted(sorted(d), key=d.get, reverse=True)
['B', 'G', 'P', 'T', 'L']
第二种排序不会更改先前排序的具有相同值的条目的顺序。
您还可以使用tuple
按多个键排序:
>>> d = {'T': 1500, 'L': 1000, 'P': 1500, 'G': 6500, 'B': 7000}
>>> sorted(d, key=lambda x: (-d.get(x), x))
['B', 'G', 'P', 'T', 'L']
为具有相同值的键指定相同的“等级”:保存已排序的list
个键,初始化rank
,value
和ranks
个引用,并遍历键。对于每个密钥,如果之前的rank
与此密钥的值不同,则value
会增加。由于True
相当于1
且False
相当于0
,因此我们只需将此比较的结果直接添加到rank
即可。然后,我们保存当前密钥value
以与下一个密钥进行比较。最后,将其添加到ranks
字典中,其中key
为关键字,rank
为值。
>>> value = 0
>>> rank = 0
>>> ranks = {}
>>> for key in s:
... rank += value != d[key]
... value = d[key]
... ranks[key] = rank
...
现在可以轻松遍历此词典并打印您要查找的结果:
>>> for k in s:
... print('{}: {}'.format(ranks[k], k))
...
1: B
2: G
3: P
3: T
4: L