我想在字典中排列值。

例如,我有这个字典:{"A": 10, "B: 3, "C": 8, "D": 3, "E": 2}
结果应如下所示:{"E": 1, "B": 2, "D": 2, "C": 4, "A": 5}

请注意,D排名第四,因为BD并列在第二位。因此,没有位置三。

在其他线程中也已经给出了类似的解决方案,但是它们没有以传统方式考虑过前位置:Adding a rank to a dict in pythonPython 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, {}


然后继续检查当前元素是否不等于前一个元素,如果为true,则将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}

关于python - 在字典中对值进行排名(并正确照顾过往 Assets ),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32908613/

10-11 22:04
查看更多