按字母数字顺序按属性对对象列表进行排序

我有一个相同类型的对象列表


lis = [<obj>, <obj>, <obj>]

我希望根据object属性自然排序name。我试过了


sortedlist = sorted(lis, key=lambda x: x.name)

但这将列表排序为


A1

A10

A2

不是我想要的格式


A1

A2

A10

我曾尝试通过对字母数字字符串进行排序来修改代码,但无法使它适用于对象列表。


慕尼黑的夜晚无繁华
浏览 188回答 3
3回答

斯蒂芬大帝

sorted(obj,&nbsp;key=lambda&nbsp;x:&nbsp;(x.name[0],&nbsp;int(x.name[1:])))

慕姐4208626

这种方式使用groupby,并适用于字母和数字之间的任意数量的交换from itertools import groupbydef keyfunc(s):&nbsp; &nbsp; return [int(''.join(g)) if k else ''.join(g) for k, g in groupby(s, str.isdigit)]sorted(my_list, key=keyfunc)演示:>>> my_list =['A1', 'A10', 'A2', 'B0', 'AA11', 'AB10']>>> sorted(my_list, key=keyfunc)['A1', 'A2', 'A10', 'AA11', 'AB10', 'B0']>>> mylist =['foo1', 'foo10', 'foo2', 'foo2bar1', 'foo2bar10', 'foo2bar3']>>> sorted(mylist, key=keyfunc)['foo1', 'foo2', 'foo2bar1', 'foo2bar3', 'foo2bar10', 'foo10']
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python