按值对字典键进行排序,然后按字母顺序对值进行排序

时间:2015-02-06 00:02:24

标签: python sorting dictionary

我知道标题中没有很好地解释,所以我会尝试在这里做得更好。我想按各自的值对字典的键进行排序,然后按字母顺序对任何键进行排序。最好的方法是什么,理想情况下不使用模块?

python是否会自动执行此类操作:

sorted(dictionary.items(), key=lambda x: x[1])

我尝试了上面的代码,它似乎工作但我不知道这是不是巧合。我在文档中找不到任何内容,我需要知道它是否会一直有效。

开始字典:

dictionary = {'d':2, 'c':1, 'a':2, 'b':3}

按值排序:

['c', 'd', 'a', 'b']

(1,2,2,3)

具有相同值的项目按字母顺序排序:

['c', 'a', 'd', 'b']

(1,2,2,3)

3 个答案:

答案 0 :(得分:3)

我认为你想要:

sorted(dictionary.items(), key=lambda t: t[::-1])

与:

相同
def reverse_tuple(t):
    return t[::-1]

sorted(dictionary.items(), key=reverse_tuple)

这是有效的,因为元组按字典顺序排序。比较第一个元素,如果它们相等,则python移动到第二个元素,依此类推。

不幸的是,这几乎只是sorted(dictionary.items()),那么你的主要排序顺序是由元组中的第一个元素(即密钥)决定的,这不是你想要的。诀窍是只需反转元组,然后按照你的意愿进行比较。

答案 1 :(得分:0)

在python版本> 3.6中,您可以使用sorted()函数对字典进行排序

保证内置的sorted()函数是稳定的。如果排序能保证不更改比较相等的元素的相对顺序,则它是稳定的

Refer Python Docs

答案 2 :(得分:0)

这样做就行了:

sorted(dic.items(),key= lambda  x: (x[1],x[0]))

它将根据第二个元素(字典的值)按升序排序。如果字典的值相等,它将比较第一个元素并按字母顺序对它们进行排序。一个更好的例子来说明这一点:

dic = {'abc':3, 'x':1, 'bcc':4, 'a':6 , 'bba':4  , 'bg':4 }

排序:

[('x', 1), ('abc', 3), ('bba', 4), ('bcc', 4), ('bg', 4), ('a', 6)]