python字母数字排序给出没有匹配' int(str)'发现过载:可以使用以下过载

时间:2014-04-16 13:42:56

标签: python

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__'

如何使这种工作?

2 个答案:

答案 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()