对字典中的值进行排名(并正确处理ex-aequos)

时间:2015-10-02 13:46:39

标签: python sorting dictionary ranking

我想将这些值排在字典中。

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

请注意,D被排名为第四,因为BD位于 two 的位置。因此,没有位置

其他主题已经提供了类似的解决方案,但他们没有考虑传统方式的前例:Adding a rank to a dict in pythonPython Ranking Dictionary Return Rank

1 个答案:

答案 0 :(得分:1)

首先根据数字按升序对数据进行排序,如此

>>> 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} 将获得您想要的结果。

    @Override
    protected void publishResults(CharSequence constraint, FilterResults results) {

        filteredShoppingList = (ArrayList<ShoppingListModel>)filterResults.values;
            if (filterResults.count > 0) {
                notifyDataSetChanged();
            } else {
                notifyDataSetInvalidated();
            }
    }