• python 多关键字排序 介绍 (Introduction) In this tutorial, we are going to take a look at the various ways following which we can Sort a Dictionary in Python. 在本教程中，我们将研究可以用Python排序字​...
python 多关键字排序 介绍 (Introduction)
In this tutorial, we are going to take a look at the various ways following which we can Sort a Dictionary in Python. 在本教程中，我们将研究可以用Python排序字​​典的各种方式。
In Python, a Dictionary is a collection of key-value pairs. The sequence of such key and value pairs is separated by commas. These pairs are called items. 在Python中， 字典是键值对的集合。 这样的键和值对的顺序以逗号分隔。 这些对称为项 。

用Python对字典进行排序的不同方法 (Different Ways to sort a Dictionary in Python)
As mentioned above, a dictionary item consists of a key and its corresponding value. Hence, sorting for a dictionary can be performed by using any one of the key or value parts as a parameter. 如上所述，字典项由键及其对应的值组成。 因此，可以通过使用键或值部分中的任何一个作为参数来执行字典的排序。
So, let us now take a look at the different methods by which we can sort a dictionary by key or by value. 因此，现在让我们看一下可以通过键或值对字典进行排序的不同方法。
1.按关键字排序字典 (1. Sort Dictionary by Key)
We can directly sort a dictionary using the built-in sorted() method in Python. This can be done by passing the dictionary itself and a function that specifies the parameter on the basis of which the sorting is to be done(in this case key). 我们可以使用Python中内置的sorted()方法直接对字典进行sorted() 。 这可以通过传递字典本身和一个函数来完成，该函数指定要基于其进行排序的参数（在本例中为键）。
Let us see how. 让我们看看如何。

d = { 5: 1 , 4: 2 , 3: 3 , 2: 4 , 1: 5 }

print("The original dictionary: ", d)

#sorting by key
a = dict(sorted(d.items(), key=lambda x: x[0]))

print("After sorting by key: ", a)
Output: 输出：

The original dictionary:  {5: 1, 4: 2, 3: 3, 2: 4, 1: 5}
After sorting by key:  {1: 5, 2: 4, 3: 3, 4: 2, 5: 1}
Here, 这里，
The d.items() method returns a list of tuples(items) containing the keys and their corresponding values, d.items()方法返回一个元组（items）列表，其中包含键及其对应的值 ， The lambda function returns the key(0th element) for a specific item tuple, lambda函数返回特定项目元组的key（ 第0个元素）， When these are passed to the sorted() method, it returns a sorted sequence which is then type-casted into a dictionary. 当这些参数传递给sorted()方法时，它返回排序的序列，然后将其类型转换为字典。 Remember, this method can be used in Python 3.6+ versions as it considers dictionaries as ordered sequences. For older versions, we can replace the lambda function with the itemgetter() method from the operator module. Let us see how. 请记住，此方法可在Python 3.6+版本中使用，因为它将字典视为有序序列。 对于较旧的版本，我们可以使用operator模块中的itemgetter()方法替换lambda函数。 让我们看看如何。

from operator import itemgetter

d = { 5: 1 , 4: 2 , 3: 3 , 2: 4 , 1: 5 }
print("Original Dict: ", d)

#sorting by key
s_d = dict(sorted(d.items(), key=itemgetter(0)))
print("Sorted dict: ", s_d)
Output: 输出：

Original Dict:  {5: 1, 4: 2, 3: 3, 2: 4, 1: 5}
Sorted dict:  {1: 5, 2: 4, 3: 3, 4: 2, 5: 1}
Here also the methods sorted() and items() work the same way. But in place of a lambda function, the itemgetter(0) method returns a callable object that fetches the 0th item from its operand using the operand’s __getitem__() method. In this case, as we need to sort by key, we consider the 0th element. 这里的sorted()和items()方法也以相同的方式工作。 但是代替lambda函数， itemgetter(0)方法返回一个可调用对象，该对象使用操作数的__getitem__()方法从其操作数中获取第0个项目。 在这种情况下，由于我们需要按key排序，因此我们考虑第0个元素。
2.按值对字典排序 (2. Sort a Dictionary by Value)
Sorting a dictionary by value is similar to sorting by key. The only difference being that this type the parameter on the basis of which the sorting would be done is the value part of the corresponding items. 按值对字典进行排序类似于按键对字典进行排序。 唯一的不同是，此类型的参数将根据其进行排序，而该参数是相应项目的值部分。
Hence as we did earlier, we can use the sorted() method along with a lambda function for Python 3.6+ versions. Let us see how. 因此，就像我们之前所做的那样，对于Python 3.6+版本，我们可以将sorted()方法与lambda函数一起使用。 让我们看看如何。

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

print("The original dictionary: ", d)

#sorting by value
a = dict(sorted(d.items(), key=lambda x: x[1]) )

print("After sorting by value: ", a)
Output: 输出：

The original dictionary:  {0: 'd', 1: 'c', 2: 'b', 3: 'a'}
After sorting by value:  {3: 'a', 2: 'b', 1: 'c', 0: 'd'}
Similarly here, according to the values returned by the lambda function(x[1] value for an item x) the dictionary d is sorted. 同样在这里，根据由lambda函数（返回的值x[1]值的项目x ）的字典d排序。
Again for older versions of Python follow the below-mentioned method. 同样，对于旧版本的Python，请遵循以下方法。

from operator import itemgetter

d = { 0: 'd', 1: 'c', 2: 'b' , 3: 'a' }
print("Original Dict: ", d)

#sorting by value
s_d = dict(sorted(d.items(), key=itemgetter(1)))
print("Sorted dict: ", s_d)
Output: 输出：

Original Dict:  {0: 'd', 1: 'c', 2: 'b', 3: 'a'}
Sorted dict:  {3: 'a', 2: 'b', 1: 'c', 0: 'd'}
Similarly, sorted() along with d.items() and itemgetter(1) methods sort the dictionary d on the basis of  value. 类似地，sorted（）连同d.items（）和itemgetter（1）方法根据值对字典d进行排序。
3.反向排序 (3. Sorting in reverse order)
The sorted() method comes with another argument reverse. That can be used for specifying the order in which the sorting is to be done. If passed True, the sorting takes place in reverse order(descending). And if False is passed(default), the sorting takes place in ascending order. sorted()方法带有另一个参数reverse 。 可以用于指定排序的顺序。 如果通过True ，则排序以相反的顺序（降序）进行。 如果传递了False （默认值），则排序以升序进行 。
Let us try to understand this by an example where we try to reverse sort a dictionary by key. 让我们尝试通过一个示例对这种情况进行理解，在该示例中，我们尝试对关键字进行反向排序。

d = { 'a': 23, 'g': 67, 'e': 12, 45: 90}

print("The original dictionary: ", d)

#sorting by value in reverse
a = dict(sorted(d.items(), reverse = True, key=lambda x: x[1]))
print("After sorting by value in reverse order: ", a)

#sorting by value in ascending order
a = dict(sorted(d.items(), key=lambda x: x[1]))#by default reverse is set to False
print("After sorting by value in ascending order: ", a)
Output: 输出：

The original dictionary:  {'a': 23, 'g': 67, 'e': 12, 45: 90}
After sorting by value in reverse order:  {45: 90, 'g': 67, 'a': 23, 'e': 12}
After sorting by value in ascending order:  {'e': 12, 'a': 23, 'g': 67, 45: 90}
From the above output, it is clear that passing the reverse parameter as True the above dictionary is sorted in reverse order(descending). 根据以上输出，   显然，将反向字典作为True传递给上面的字典是按相反的顺序排序（ 降序 ）。
结论 (Conclusion)
So in this tutorial, we learned how we can sort a dictionary in Python using various methods. 因此，在本教程中，我们学习了如何使用各种方法在Python中对字典进行排序 。
For any further questions, feel free to use the comments below. 如有其他疑问，请随时使用以下评论。
参考资料 (References)
How to Sort a Dictionary in Python? – AskPython Post 如何在Python中对字典排序？ – AskPython发布 Python Dictionary – Journal Dev Post Python字典 – Journal Dev Post How do I sort a dictionary by value? – Stackoverflow Question 如何按值对字典排序？ – Stackoverflow问题 How can I sort a dictionary by key? – Stackoverflow Question 如何按键对字典排序？ – Stackoverflow问题 翻译自: https://www.journaldev.com/38407/sort-a-dictionary-in-pythonpython 多关键字排序
展开全文
• 2. 解决思路我们先看看简单的2个关键字排序，有以下两种方式：先进行第一关键字排序，再进行第二关键字排序；先进行第二关键字排序，再进行第一关键字排序。这两种排序顺序，结果会有什么不同...
1. 问题引入在排序问题中，经常会遇到使用多个关键字进行排序。比如说，按照字母顺序对一批学生姓名进行排序，如果第一个字母相同，则按照第二个字母顺序排序，以此类推。这就会导致，多个关键字出现时，怎么去协调关键字的顺序呢？2. 解决思路我们先看看简单的2个关键字排序，有以下两种方式：先进行第一关键字排序，再进行第二关键字排序；先进行第二关键字排序，再进行第一关键字排序。这两种排序顺序，结果会有什么不同吗？很显然，靠后面的关键字排序，可能会打乱前面关键字的排序。举个简单的例子就很容易理解了。设列表 lst = [(2, 2), (1, 1), (1, 3)]，对该列表进行升序排序，如果第一个元素相同，则按照第二个元素升序排序。很显然，第一关键字是第一个元素，第二关键字是第二个元素。方式一：先进行第一关键字排序，再进行第二关键字排序lst = [(2, 2), (3, 1), (1, 3)]lst.sort(key=lambda x: x[0])# 先对第1个关键字排序lst.sort(key=lambda x: x[1])# 再对第2个关键字排序print(lst)# 输出的结果为[(1, 1), (2, 2), (1, 3)]方式二：先进行第二关键字排序，再进行第一关键字排序lst = [(2, 2), (3, 1), (1, 3)]lst.sort(key=lambda x: x[1])# 先对第2个关键字排序lst.sort(key=lambda x: x[0])# 再对第1个关键字排序print(lst)# 输出的结果为[(1, 1), (1, 3), (2, 2)]从上面的例子中可以看出，不同关键字顺序的排序方式导致了最终排序的结果也不同。方式二的排序方式才是我们想要的结果；方式一的结果为什么错了呢？原因是我们想要第一关键字进行排序，但是进行第二关键字排序时，打乱了第一关键字的排序方式，导致结果不符合我们的预期。3. 总结在进行多关键字排序时，如果是按照关键字分步进行排序时，按照关键字逆序的顺序进行排序，就能得到我们想要的结果了。比如由3个关键字，应该先进行第三关键字排序，再进行第二关键字排序，最后进行第一关键字排序。到这里还未结束，因为我们使用的编程语言是Python，Python列表为我们提供的sort函数功能远不止此。一天天没事做，净整那些花里胡哨的，还有什么是一句Python代码不能搞定的 ：lst.sort(key=lambda x: (x[0],x[1]))# 直接按照顺序，第一关键字先，第二关键字后如果由N个关键字，可以写成如下：lst.sort(key=lambda x: (第1关键字 , 第2关键字 , ......))如果有帮助，还望少侠留下你的赞！感谢支持。
展开全文
• 文章目录1. 问题引入2....先进行第一关键字排序，再进行第二关键字排序； 先进行第二关键字排序，再进行第一关键字排序。 这两种排序顺序，结果会有什么不同吗？很显然，靠后面的关键字排序，可能会打乱前
文章目录1. 问题引入2. 解决思路3. 总结
1. 问题引入
在排序问题中，经常会遇到使用多个关键字进行排序。比如说，按照字母顺序对一批学生姓名进行排序，如果第一个字母相同，则按照第二个字母顺序排序，以此类推。这就会导致，多个关键字出现时，怎么去协调关键字的顺序呢？
2. 解决思路
我们先看看简单的2个关键字排序，有以下两种方式：

先进行第一关键字排序，再进行第二关键字排序；
先进行第二关键字排序，再进行第一关键字排序。

这两种排序顺序，结果会有什么不同吗？很显然，靠后面的关键字排序，可能会打乱前面关键字的排序。举个简单的例子就很容易理解了。

设列表 lst = [(2, 2), (1, 1), (1, 3)]，对该列表进行升序排序，如果第一个元素相同，则按照第二个元素升序排序。
很显然，第一关键字是第一个元素，第二关键字是第二个元素。
方式一：先进行第一关键字排序，再进行第二关键字排序
lst = [(2, 2), (3, 1), (1, 3)]
lst.sort(key=lambda x: x[0])		# 先对第1个关键字排序
lst.sort(key=lambda x: x[1])		# 再对第2个关键字排序

print(lst)				# 输出的结果为[(1, 1), (2, 2), (1, 3)]

方式二：先进行第二关键字排序，再进行第一关键字排序
lst = [(2, 2), (3, 1), (1, 3)]
lst.sort(key=lambda x: x[1])		# 先对第2个关键字排序
lst.sort(key=lambda x: x[0])		# 再对第1个关键字排序

print(lst)				# 输出的结果为[(1, 1), (1, 3), (2, 2)]

从上面的例子中可以看出，不同关键字顺序的排序方式导致了最终排序的结果也不同。
方式二的排序方式才是我们想要的结果；
方式一的结果为什么错了呢？原因是我们想要第一关键字进行排序，但是进行第二关键字排序时，打乱了第一关键字的排序方式，导致结果不符合我们的预期。
3. 总结
在进行多关键字排序时，如果是按照关键字分步进行排序时，按照关键字逆序的顺序进行排序，就能得到我们想要的结果了。比如由3个关键字，应该先进行第三关键字排序，再进行第二关键字排序，最后进行第一关键字排序。
到这里还未结束，因为我们使用的编程语言是Python，Python列表为我们提供的sort函数功能远不止此。一天天没事做，净整那些花里胡哨的，还有什么是一句Python代码不能搞定的 ：
lst.sort(key=lambda x: (x[0],x[1]))		# 直接按照顺序，第一关键字先，第二关键字后

如果由N个关键字，可以写成如下：
lst.sort(key=lambda x: (第1关键字 , 第2关键字 , ......))

如果有帮助，还望少侠留下你的赞！感谢支持。


展开全文
• 让第一个关键字正序,第二个关键字倒序
python 多关键字排序
当排序关键字多于1个时,我们使用lambda表达式来描述关键字key
arr=[(1,4,3),(1,3,3),(2,1,4),(3,5,1)]

arr.sort(key=lambda s:(s[0],s[1])) #两个关键字排序
print(arr) # 可以看到输出结果是根据列表中元组的第一项和第二项排序

[(1, 3, 3), (1, 4, 3), (2, 1, 4), (3, 5, 1)]

若我想让第一个关键字正序,第二个关键字倒序,该怎么办呢?
arr=[(1,4,3),(1,3,3),(2,1,4),(3,5,1)]

arr.sort(key=lambda s:(s[0],-s[1])) #两个关键字排序,在需要倒序排列的关键字前加-号
print(arr)

[(1, 4, 3), (1, 3, 3), (2, 1, 4), (3, 5, 1)]





展开全文
• l = ['length_100cm_width_30cm_pict','length_200cm_width_30cm_pict','length_100cm_width_10cm_pict','length_100cm_width_40cm_pict','length_200cm_width_20cm_pict','length_100cm_width_20cm_pict','length_2
• class Solution:"""@param array: the input array@return: the sorted array"""def multiSort(self, array):self.quickSort(array, 0, len(array) - 1, 1, False)left, right = 0, 1while right <...
• Python语言内置了排序函数，即list对象有一个sort()方法以及sorted()函数 sort()方法 该方法会修改列表对象，且该方法的返回值为None，因此不可以将list.sort()赋值给列表 sorted()函数 该函数可以接受一个列表...
• 以列表有两列为例，我们需要按照两列排序，可以利用sorted和lambda组合 l = [['a', 2], ['c', 1], ['d', 4], ['b', 2]] sorted(l, key = lambda x: (x[1], x[0]), reverse = True) 然后结果是 [['d', 4], ['b', 2]...
• class Solution: """ @param array: the input array @return: the sorted array """ def multiSort(self, array): self.quickSort(array, 0, len(array) - 1, 1, False) left...
• 前言： 加入我需要对如下几个文件按照从下到大排序，可是他的关键字有个应该怎么办了？ 例如我希望005开头在006和007的前面，然后005内部...利用list.sort(）中的关键字排序功能，先按照key1排序，再按照key2...
• people.sort(key = lambda x:(x[0],x[1]))
• 因为Core Python Programming上的一个作业7-3要求将一个...或者说个Tuple之间排序时如果指定用第几个元素为关键字？ google了一下找到了答案，记一下： 解决方案有二： 方法一是采用lambda语法。 Python
• 首先基本的应用请参考其它教程，百度很。 现有列表ll=[(1,2),(4,5),(8,9),(1,1),(4,3),(8,20)]，要实现排序排序规则为：按元组第一个元素降序，如果元祖第一个元素相同按元祖第二个元祖升序。 import ...
• python list set 996 tuple 输出样例 (3, '996') (3, 'set') (4, 'list') (5, 'tuple') (6, 'python') #[ # ["单词个数","单词"], # ["单词个数","单词"], # ["单词个数","单词"], # ["单词个数","单词"] #] ...
• 但是实际场景当中，排序的应用往往比较复杂，比如对象类型，当中有多个字段，我们希望按照指定字段排序，或者是希望按照多关键字排序，这个时候就不能简单的函数调用来解决了。字典排序我们先来看下最常见的字典排序...

...

python 订阅