我知道标题中没有很好地解释,所以我会尝试在这里做得更好。我想按各自的值对字典的键进行排序,然后按字母顺序对任何键进行排序。最好的方法是什么,理想情况下不使用模块?
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)
答案 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()函数是稳定的。如果排序能保证不更改比较相等的元素的相对顺序,则它是稳定的
答案 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)]