python - 在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)
解决方案
您只需要分配自己的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)