1

可能重复:
如何对列表/元组进行排序(列表/元组)?

我有一个元组列表,我想按元组中的第二个值按数字顺序排序。我正在使用的列表示例是:

[('H2O', '6'), ('O2', '4')]

所以在这种情况下我想要的是:

[('O2','4'),('H2O',6')]

我知道这真的很基本,我似乎可以弄清楚。

4

4 回答 4

7

使用 的key参数sort

mylist.sort(key = lambda x: int(x[1]))

这会将元组中的第二个元素转换为整数,并按这些整数排序。

由于您的元组在第二个元素中包含数字,因此将数字存储在元组中而不是字符串中更有意义。如果这样做,您可以使用以下命令进行排序:

import operator
mylist.sort(key = operator.itemgetter(1))
于 2012-12-18T18:07:14.353 回答
3
>>> l = [('H2O', '6'), ('O2', '4')]
>>> l.sort(key = lambda x: int(x[1]))
>>> l
[('O2', '4'), ('H2O', '6')]

sort方法in-place进行排序,因此修改您的list.

您还可以使用sorted函数,它返回排序后的列表,同时保持原始列表不变。

>>> sorted(l, key=lambda x: int(x[1]))
[('O2', '4'), ('H2O', '6')]
>>> l
[('H2O', '6'), ('O2', '4')]  # Original list unmodified

sorted如果我们想遍历排序列表,我们经常使用函数。

于 2012-12-18T18:06:20.547 回答
2

您需要使用(或)的key参数。它是一个传递可迭代对象的每个元素(在本例中为每个元组)的函数。sortsorted

你可以使用operator.itemgetter...

In [1]: import operator

In [2]: chem = [('H2O', '6'), ('O2', '4')]

In [3]: sorted(chem, key=operator.itemgetter(1))
Out[3]: [('O2', '4'), ('H2O', '6')]

或一个简单的功能:

In [4]: sorted(chem, key=lambda x: x[1])
Out[4]: [('O2', '4'), ('H2O', '6')]

编辑:interjay 是对的:最好将第二项转换为数字:

sorted(chem, key=lambda x: int(x[1]))

否则,它们将按字母顺序排序。

于 2012-12-18T18:06:05.430 回答
0

你必须首先import operator 现在使用key参数来list.sort()

list.sort(key=lambda x: x[1])

为了更快,

list.sort(key=operator.itemgetter(1))
于 2012-12-18T18:14:16.027 回答