Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按值排序字典键,然后按字母顺序排序具有相同值的字典键_Python_Sorting_Dictionary - Fatal编程技术网

Python 按值排序字典键,然后按字母顺序排序具有相同值的字典键

Python 按值排序字典键,然后按字母顺序排序具有相同值的字典键,python,sorting,dictionary,Python,Sorting,Dictionary,我知道标题中没有很好的解释,所以我会努力在这里做得更好。我想按字典键各自的值对它们进行排序,然后按字母顺序对具有相同值的键进行排序。理想情况下,不使用模块的最佳方式是什么 python是否会自动执行以下排序: sorted(dictionary.items(), key=lambda x: x[1]) 我尝试了上面的代码,它似乎起了作用,但我不知道这是否只是巧合。我在文档中找不到任何东西,我需要知道它是否始终有效 起始字典: dictionary = {'d':2, 'c':1, 'a':2,

我知道标题中没有很好的解释,所以我会努力在这里做得更好。我想按字典键各自的值对它们进行排序,然后按字母顺序对具有相同值的键进行排序。理想情况下,不使用模块的最佳方式是什么

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)

我想你想要:

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

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

sorted(dictionary.items(), key=reverse_tuple)
这是因为元组是按字典顺序排序的。对第一个元素进行比较,如果它们相等,python将转到第二个元素,以此类推


这几乎只是
排序(dictionary.items())
不幸的是,您的主要排序顺序是由元组中的第一个元素(即键)决定的,这不是您想要的。诀窍是只需反转元组,然后比较就可以按您希望的方式进行。

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

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


这将实现以下目的:

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)]

你能解释一下区别吗?我真的不太熟悉这些函数,“我的”代码是在另一个问题上发现的,当我看到它工作时被复制的。你的代码只是查看索引1处元组中的元素(即“值”)。如果两个项具有相等的值,则排序算法认为它们是相同的(出于所有目的),并将它们以相同的顺序放入输出中(不管“键”)。我的密钥只有在值相同的情况下才会被考虑。这似乎是重复了好几次?检查以下答案: