data = set(['booklet', '4 sheets', '48 sheets', '12 sheets',44,443 ,'$sdsds', '>>>>ASdasdas'])
r = sorted(data, key=lambda item: (int(item.partition(' ')[0])
if item[0].isdigit() else float('inf'), str(item)))
print ',\n'.join(r)
我得到了:
Traceback (most recent call last):
File "test.py", line 2, in <module>
r = sorted(data, key=lambda item: (int(item.partition(' ')[0])
File "test.py", line 3, in <lambda>
if item[0].isdigit() else float('inf'), str(item)))
TypeError: 'int' object has no attribute '__getitem__'
如何使这种工作?
答案 0 :(得分:2)
你想要这个???
In [12]: r = sorted(data, key=lambda item: (int(str(item).partition(' ')[0])if str(item)[0].isdigit() else float('inf'), str(item)))
In [13]: r
Out[13]:
['4 sheets',
'12 sheets',
44,
'48 sheets',
443,
'$sdsds',
'>>>>ASdasdas',
'booklet']
答案 1 :(得分:1)
您不能下标整数,因为它们不可迭代。当您执行44[0]
时,这就是您要做的事。
你可能意味着:
str(item)[0].isdigit()