在Python中对字典进行降序和升序排序

2024-10-02 00:34:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我想按值对字典排序。如果值相同,那么我想按键对其排序。在

例如,如果我有字符串“bitter butter a butter baggy”,输出必须是[(butter,2),(a,1),(baggy,1),(bitter,1))。在

下面的代码按值降序对字典进行排序。但是我不能做第二部分,也就是说,如果值相同,那么我有升序排序键。在

def count_words(s,n):
  words = s.split(" ")
  wordcount = {}
  for word in words:
   if word not in wordcount:
    wordcount[word] = 1
   else:
    wordcount[word] += 1
  sorted_x = sorted(wordcount.items(), key=operator.itemgetter(1), reverse=True)
  sorted_asc = sorted(wordcount.items(), key=operator.itemgetter(0))
 return sorted_x

Tags: keyin字典排序itemsoperatorwordcount按键
2条回答

我想这会有帮助

s = { "A":1, "B":1,  "C":1, "D":0, "E":2, "F":0 }
rez = sorted(s.items(), key = lambda x: (x[1],x[0]))

结果是

^{pr2}$

如果需要颠倒顺序,只需使用-x[1]而不是x[1]

为此,您需要编写一个比较器,它首先按count对值进行排序,如果值相等,则按键对值进行排序。在

from collections import defaultdict


def count_words(s):
    def comparator(first, second):
        if first[1] > second[1]:
            return 1
        elif first[1] < second[1]:
            return -1

        if first[0] > second[0]:
            return -1
        elif first[0] == second[0]:
            return 0
        return 1

    words = s.split(" ")
    wordcount = defaultdict(int)

    for word in words:
        wordcount[word] += 1

    return sorted(wordcount.items(), cmp=comparator, reverse=True)


print count_words("bitter butter a c batter butter baggy")

[('butter', 2), ('a', 1), ('baggy', 1), ('batter', 1), ('bitter', 1), ('c', 1)]

相关问题 更多 >

    热门问题