如何有效地对字典进行二维排序 字典是这样的,我需要根据它的值的关键与最高值获得最低等级。如果2个键具有然后相同的值它们被排序在词典编纂顺序:蟒蛇基于值排序字典,并基于键的顺序,如果值重复
d = {'T': 1500, 'L': 1000, 'P': 1500, 'G': 6500, 'B': 7000}
预期输出:
1 : B
2 : G
3 : P
3 : T
4 : L
在这里,因为它们是按字母顺序排列
进行排序的T和P重复进行值如何有效地对字典进行二维排序 字典是这样的,我需要根据它的值的关键与最高值获得最低等级。如果2个键具有然后相同的值它们被排序在词典编纂顺序:蟒蛇基于值排序字典,并基于键的顺序,如果值重复
d = {'T': 1500, 'L': 1000, 'P': 1500, 'G': 6500, 'B': 7000}
预期输出:
1 : B
2 : G
3 : P
3 : T
4 : L
在这里,因为它们是按字母顺序排列
进行排序的T和P重复进行值首先排序键,然后按降序值:
>>> d = {'T': 1500, 'L': 1000, 'P': 1500, 'G': 6500, 'B': 7000}
>>> sorted(sorted(d), key=d.get, reverse=True)
['B', 'G', 'P', 'T', 'L']
的塞康d排序不会更改以前排序的具有相同值的条目的顺序。
你也可以使用一个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
引用,并遍历密钥。对于每个密钥,如果以前的value
与此密钥的值不同,则会增加rank
。由于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
它的工作原理。 Thnx ... – prime130392
@ prime130392 - 我添加了一种方法来确定并保存每个键的等级。 – TigerhawkT3
的*什么*预期的输出?无论如何,你不能排序字典。你需要一个不同的数据结构。 – juanchopanza
看起来你想按字典的值排序字典的键;那是对的吗?阅读[Python sorting howto](https://wiki.python.org/moin/HowTo/Sorting)可能会很好。 – Evert
是否需要P和T(因为它们具有相同的值)具有相同的等级?或者排名第3和第4位是合适的,只要这些排序是按照字典顺序排列的。 – Evert