如何按字母顺序对python列表进行排序,同时考虑到列表项后面的编号。参见下面的示例和用于排序的代码。请注意,如果数字低于10,则不可能在代码中插入零。
原始列表:
“绘图-n-3”、“绘图-n-2”、“绘图-n-1”、“绘图-n-7”、“绘图-n-6”、“绘图-n-5”、“绘图-n-4”、“绘图-n-9”、“绘图-n-8”、“绘图-n-16”、“绘图-n-15”、“绘图-n-14”、“绘图-n-13”、“绘图-n-12”,“绘图-n-11”、“绘图-n-10”、“绘图-n-17”
排序列表:
“绘图-n-1”、“绘图-n-10”、“绘图-n-11”、“绘图-n-12”、“绘图-n-13”、“绘图-n-14”、“绘图-n-15”、“绘图-n-16”、“绘图-n-17”、“绘图-n-2”、“绘图-n-3”、“绘图-n-4”、“绘图-n-5”、“绘图-n-6”,“绘图-n-7”、“绘图-n-8”、“绘图-n-9”
期望的列表输出:
“绘图-n-1”、“绘图-n-2”、“绘图-n-3”、“绘图-n-4”、“绘图-n-5”、“绘图-n-6”、“绘图-n-7”、“绘图-n-8”、“绘图-n-9”、“绘图-n-10”、“绘图-n-11”、“绘图-n-12”、“绘图-n-13”、“绘图-n-14”,“绘图-n-15”、“绘图-n-16”、“绘图-n-17”
代码:
dwg_number_keys = [key for key in kwargs if key.startswith("drawing-n-")]
print dwg_number_keys
print sorted(dwg_number_keys, key=str.lower)发布于 2017-12-04 05:04:42
如下所示:
>>> my_list = ['drawing-n-3', 'drawing-n-2', 'drawing-n-1', 'drawing-n-7', 'drawing-n-6', 'drawing-n-5', 'drawing-n-4', 'drawing-n-9', 'drawing-n-8', 'drawing-n-16', 'drawing-n-15', 'drawing-n-14', 'drawing-n-13', 'drawing-n-12', 'drawing-n-11', 'drawing-n-10', 'drawing-n-17']
>>> sorted(my_list, key=lambda s:int(s[s.rindex('-')+1:]))
['drawing-n-1', 'drawing-n-2', 'drawing-n-3', 'drawing-n-4', 'drawing-n-5', 'drawing-n-6', 'drawing-n-7', 'drawing-n-8', 'drawing-n-9', 'drawing-n-10', 'drawing-n-11', 'drawing-n-12', 'drawing-n-13', 'drawing-n-14', 'drawing-n-15', 'drawing-n-16', 'drawing-n-17']key lambda只是解析在每个字符串的最后一个“-”标记之后找到的整数。
发布于 2017-12-04 05:01:48
将其从字符串解析为要排序的整数:-
>>> begin = len("drawing-n-")
>>> sorted(dwg_number_keys, key=lambda s:int(s[len("drawing-n-"):]))
['drawing-n-1', 'drawing-n-2', 'drawing-n-3', 'drawing-n-4', 'drawing-n-5', 'drawing-n-6', 'drawing-n-7', 'drawing-n-8', 'drawing-n-9', 'drawing-n-10', 'drawing-n-11', 'drawing-n-12', 'drawing-n-13', 'drawing-n-14', 'drawing-n-15', 'drawing-n-16', 'drawing-n-17']发布于 2017-12-04 05:05:12
这将得到你想要的,如果格式和你想象的一样一致的话。
lambda x: int(x.split('-')[-1])
https://stackoverflow.com/questions/47626770
复制相似问题