Ranking values in a Dictionary (and taking care of ex-aequos correctly)

前端 未结 1 1965
情歌与酒
情歌与酒 2021-01-25 16:33

I would like to rank the values in a dictionary.

For instance, I have this dictionary: {\"A\": 10, \"B: 3, \"C\": 8, \"D\": 3, \"E\": 2} The result should l

1条回答
  •  抹茶落季
    2021-01-25 17:16

    First sort the data in ascending order based on the number, like this

    >>> 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)]
    

    Now, for every element processed,

    • if it is not the same as the previous element then the rank should be incremented by the number of similar elements processed till now

    • if it is the same, then simply count the current element as a similar element

    To implement this, initialize few variables, like this

    >>> rank, count, previous, result = 0, 0, None, {}
    

    then keep checking if the current element is not equal to the previous element and if it is true, increment rank by the number of times the similar elements occured.

    >>> for key, num in s_data:
    ...     count += 1
    ...     if num != previous:
    ...         rank += count
    ...         previous = num
    ...         count = 0
    ...     result[key] = rank
    

    Now, result will have the result you wanted.

    >>> result
    {'D': 2, 'C': 4, 'E': 1, 'B': 2, 'A': 5}
    

    0 讨论(0)
提交回复
热议问题