在字典中对值进行排名(并正确处理 ex-aequos)
Ranking values in a Dictionary (and taking care of ex-aequos correctly)
我想对字典中的值进行排序。
例如,我有这本字典:{"A": 10, "B: 3, "C": 8, "D": 3, "E": 2}
结果应如下所示:{"E": 1, "B": 2, "D": 2, "C": 4, "A": 5}
请注意 D
排在 第四位 因为 B
和 D
并列在 two。因此,没有位置 three.
类似的解决方案已经在其他线程中给出,但是他们没有以传统方式考虑ex-aequo位置:Adding a rank to a dict in python and Python Ranking Dictionary Return Rank
首先将数据按照编号从小到大排序,像这样
>>> data = {"A": 10, "B": 3, "C": 8, "D": 3, "E": 2}
>>> s_data = sorted(data.items(), key=lambda item: item[1])
>>> s_data
[('E', 2), ('D', 3), ('B', 3), ('C', 8), ('A', 10)]
现在,对于处理的每个元素,
如果它与前一个元素不同,那么排名应该增加到现在处理的相似元素的数量
如果相同,则简单算当前元素为相似元素
要实现这个,初始化几个变量,像这样
>>> rank, count, previous, result = 0, 0, None, {}
然后继续检查当前元素是否不等于前一个元素,如果为真,则将rank
增加相似元素出现的次数。
>>> for key, num in s_data:
... count += 1
... if num != previous:
... rank += count
... previous = num
... count = 0
... result[key] = rank
现在,result
就会得到你想要的结果。
>>> result
{'D': 2, 'C': 4, 'E': 1, 'B': 2, 'A': 5}
我想对字典中的值进行排序。
例如,我有这本字典:{"A": 10, "B: 3, "C": 8, "D": 3, "E": 2}
结果应如下所示:{"E": 1, "B": 2, "D": 2, "C": 4, "A": 5}
请注意 D
排在 第四位 因为 B
和 D
并列在 two。因此,没有位置 three.
类似的解决方案已经在其他线程中给出,但是他们没有以传统方式考虑ex-aequo位置:Adding a rank to a dict in python and Python Ranking Dictionary Return Rank
首先将数据按照编号从小到大排序,像这样
>>> data = {"A": 10, "B": 3, "C": 8, "D": 3, "E": 2}
>>> s_data = sorted(data.items(), key=lambda item: item[1])
>>> s_data
[('E', 2), ('D', 3), ('B', 3), ('C', 8), ('A', 10)]
现在,对于处理的每个元素,
如果它与前一个元素不同,那么排名应该增加到现在处理的相似元素的数量
如果相同,则简单算当前元素为相似元素
要实现这个,初始化几个变量,像这样
>>> rank, count, previous, result = 0, 0, None, {}
然后继续检查当前元素是否不等于前一个元素,如果为真,则将rank
增加相似元素出现的次数。
>>> for key, num in s_data:
... count += 1
... if num != previous:
... rank += count
... previous = num
... count = 0
... result[key] = rank
现在,result
就会得到你想要的结果。
>>> result
{'D': 2, 'C': 4, 'E': 1, 'B': 2, 'A': 5}