我必须根据元组中的第一项对下面的元组列表进行排序,这样
[ ('1 a', 'thisis1a'),
('1 b', 'thisis1b'),
('4', 'thisis4'),
('3', 'thisis3'),
('2a', 'thisis2a')
]
changes to:
[ ('1 a', 'thisis1a'),
('1 b', 'thisis1b'),
('2a', 'thisis2a'),
('3', 'thisis3'),
('4', 'thisis4')
]
我尝试了以下代码,但是没有用:
from operator import itemgetter
sorted(showlist, key=itemgetter(1))
我也尝试过:
q=sorted(showlist,key=lambda item: (int(item.partition(' ')[0])
if item[0].isdigit() else float('inf'), item))
但是没用。
这是我的实际清单:
lists=[('1', 'no'),
('10', 'nan'),
('11', '["I\'m still a student and \xa0I am retraining."]'),
('12', 'nan'),
('14', 'no'),
('15', 'nan'),
('16', 'no'),
('17', 'nan'),
('18', '["I\'m still as student"]'),
('19 a', 'nan'),
('19 b', 'nan'),
('20 a', '["I\'m still a student member.\xa0"]'),
('69', 'nan'),
('7 a', '["Other"]'),
('7 b', 'nan'),
('72', 'nan'),
('8', 'nan'),
('9', 'yes')]
答案 0 :(得分:1)
您可以使用re.findall
:
import re
lists = [('1', 'no'), ('10', 'nan'), ('11', '["I\'m still a student and \xa0I am retraining."]'), ('12', 'nan'), ('14', 'no'), ('15', 'nan'), ('16', 'no'), ('17', 'nan'), ('18', '["I\'m still as student"]'), ('19 a', 'nan'), ('19 b', 'nan'), ('20 a', '["I\'m still a student member.\xa0"]'), ('69', 'nan'), ('7 a', '["Other"]'), ('7 b', 'nan'), ('72', 'nan'), ('8', 'nan'), ('9', 'yes')]
new_result = sorted(lists, key=lambda x:[int(re.findall('^\d+', x[0])[0]), x])
输出:
[('1', 'no'),
('7 a', '["Other"]'),
('7 b', 'nan'),
('8', 'nan'),
('9', 'yes'),
('10', 'nan'),
('11', '["I\'m still a student and \xa0I am retraining."]'),
('12', 'nan'),
('14', 'no'),
('15', 'nan'),
('16', 'no'),
('17', 'nan'),
('18', '["I\'m still as student"]'),
('19 a', 'nan'),
('19 b', 'nan'),
('20 a', '["I\'m still a student member.\xa0"]'),
('69', 'nan'),
('72', 'nan')]