排序化学和系数的元组

时间:2012-12-18 18:03:14

标签: python

  

可能重复:
  How to sort (list/tuple) of lists/tuples?

我有一个元组列表,我希望按元组中的第二个值按数字顺序排序。我正在使用的列表样本是:

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

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

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

我知道这是非常基本的,我似乎可以弄明白。

4 个答案:

答案 0 :(得分:7)

使用key的{​​{1}}参数:

sort

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

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

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

答案 1 :(得分: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函数。

答案 2 :(得分:2)

您需要使用key(或sorted)的sort参数。它是一个传递迭代的每个元素的函数(在这种情况下,每个元组)。

您可以使用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 is right:最好将第二项转换为数字:

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

否则他们将按字母顺序排序。

答案 3 :(得分:0)

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

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

为了更快,

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