Python 中 lambda 函数的问题

map = {}


for i in words:

    if i not in map:

        map[i] = 0

    map[i] += 1

    

values = list(map.items())

values = sorted(values, key=lambda x: [x[1], x[0]], reverse=True)  

 

res = []


for i in range(len(values)-1, len(values)-1-k, -1):

    res.append(values[i][0])

return res

我试图首先按较高频率计数排序,然后按字母顺序排序。我该如何使用 lambda 函数来做到这一点?


values是一个元组列表,其中元组中的第一个元素表示单词,第二个元素表示其频率计数。例如:("hi", 2)


例如,["i", "love", "leetcode", "i", "love", "coding"]应该输出[('i', 2), ('love', 2), ('leetcode', 1), ('coding', 1)],但我的正在输出[('love', 2), ('i', 2), ('leetcode', 1), ('coding', 1)]。


幕布斯6054654
浏览 100回答 1
1回答

慕后森

由于您想按频率降序排序,然后按字母顺序排序,因此您不能使用reverse=True它来按降序对单词进行排序。-x[1]相反,您可以对频率进行降序排序:values = [('i', 2), ('love', 2), ('leetcode', 1), ('coding', 1)]values = sorted(values, key=lambda x: (-x[1], x[0]))print(values)输出:[('i', 2), ('love', 2), ('coding', 1), ('leetcode', 1)]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python