以数字方式排序具有字符串和整数值的列表

时间:2015-05-09 21:57:42

标签: python sorting

我正在寻找一个可以对列表进行排序的代码,例如list x,其中包含整数和字符串。然后,代码将对列表x进行排序,以便对应于该字符串对整数值进行排序。到目前为止,我已尝试过这段代码,但它不起作用。

x =["a" 2,"c" 10, "b" 5]
x.sort()
print (x)

我希望结果是

["a" 2 "b" 5 "C" 10]

所以列表按加号顺序按数字排序,字符串也打印出来。

4 个答案:

答案 0 :(得分:1)

使用元组列表,然后根据您的需要对它们进行排序,例如:

x = [('b',5),('a',2),('c',10)]
x.sort() # This will sort them based on item[0] of each tuple
x.sort(key=lambda s: s[1]) # This will sort them based on item[1] of each tuple

另一种方法是使用字典而不是元组列表,例如:

x = {'b':5,'a':2,'c':10}#This will be automatically sorted based on the key of each element

如果你打印x,你会得到:

{'a': 2, 'c': 10, 'b': 5}

如果你想根据每个元素的值对它们进行排序,那么:

x = sorted(x.items(), key=lambda s:s[1])

这将创建一个新的元组列表,因为sorted()返回“new”排序列表,因此结果将是:

[('a', 2), ('b', 5), ('c', 10)]

答案 1 :(得分:0)

如果我正确扣除,你也希望结果列表有一个整数,其中原始列表有一个整数(字符相同)。

我认为没有一种开箱即用的方法可以做到这一点。一种可能的方法是将列表分成另外两个:一个是整数,一个是字符。然后,在对每个列表进行排序后,您可以根据所需的整数和字符位置合并它们。

答案 2 :(得分:0)

使用嵌套的iterable将字母与数字配对,然后按第二个元素对项目进行排序:

# just pairs.sort(key = lambda x: x[1])

pairs = [('a', 2), ('c', 10), ('b', 5)] 

答案 3 :(得分:0)

我认为元素是分开的。以下代码可能有所帮助,您可以根据需要填写或删除except块中的print语句。

x =["a", 2,"c", 10, "b", 5]
numbers = []
letters = []
for element in x:
        try:
                numbers.append(int(element))
        except:
                letters.append(str(element))
numbers.sort()
letters.sort()
numbers.reverse()
letters.reverse()
for index,item in enumerate(x):
        try:
                print int(item),
                x[index] = numbers.pop()
        except ValueError:
                x[index] = letters.pop()
print "\n"+ str(x)