关于python:排序化学和系数的元组

Sort Tuple of chemical and coeff

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
How to sort (list/tuple) of lists/tuples?

我有一个元组列表,我想按该元组中第二个值的数字顺序排序。我正在处理的列表示例如下:

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

因此,在这种情况下,我想要的是:

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

我知道这是很基本的,我只是想弄明白。


使用sortkey参数:

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

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

因为元组在第二个元素中包含数字,所以在元组中存储数字比在字符串中存储数字更有意义。如果这样做,可以对以下内容进行排序:

1
2
import operator
mylist.sort(key = operator.itemgetter(1))


1
2
3
4
>>> l = [('H2O', '6'), ('O2', '4')]
>>> l.sort(key = lambda x: int(x[1]))
>>> l
[('O2', '4'), ('H2O', '6')]

sort方法执行in-place排序,因此修改了list

您还可以使用sorted函数,该函数返回已排序的列表,同时不修改原始列表。

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

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


您需要使用sortsortedkey参数。它是传递iterable的每个元素(在本例中是每个元组)的函数。

你可以使用operator.itemgetter

1
2
3
4
5
6
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')]

或者一个简单的函数:

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

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

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

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


你得先去埃多克斯1〔11〕。现在使用key参数到list.sort()中:

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

为了更快,

1
list.sort(key=operator.itemgetter(1))