首页 > 解决方案 > 在python中对包含字符串和数字的元组进行排序

问题描述

我有一个这样的清单;

List = [('apple 5', 12), ('apple 3', 2), ('apple 6', 10),('apple 4', 15), ('apple 9', 11), ('apple 7', 14), ('apple 18', 10), ('apple 16', 10),('orange 5', 4), ('orange 4', 7)]

我知道如何正常对列表进行排序。

for i in sorted(List):
  print(i)

这给出了;

('apple 16', 10)
('apple 18', 10)
('apple 3', 2)
('apple 4', 15)
('apple 5', 12)
('apple 6', 10)
('apple 7', 14)
('apple 9', 11)
('orange 4', 7)
('orange 5', 4)

但是我可以这样排序吗?

('apple 3', 2)
('apple 4', 15)
('apple 5', 12)
('apple 6', 10)
('apple 7', 14)
('apple 9', 11)
('apple 16', 10)
('apple 18', 10)
('orange 4', 7)
('orange 5', 4)

标签: pythonarrayspython-3.xlisttuples

解决方案


您只需要分配自己的key

l1 = [('apple 5', 12), ('apple 3', 2), ('apple 6', 10),('apple 4', 15), ('apple 9', 11), ('apple 7', 14), ('apple 18', 10), ('apple 16', 10),('orange 5', 4), ('orange 4', 7)]

def sort_key(x):
    word, num = x[0].split()
    return word, int(num), x[1] # Sort by word, than the number as an integer, than the final number

l1.sort(key=sort_key)
print(*l1, sep='\n')

输出:

('apple 3', 2)
('apple 4', 15)
('apple 5', 12)
('apple 7', 14)
('apple 9', 11)
('apple 16', 10)
('apple 18', 10)
('orange 4', 7)
('orange 5', 4)

推荐阅读