['7', 'Google', '100T', 'Chrome', '10', 'Python']
我希望结果是最后的所有数字,其余的排序。这些数字无需排序。
Chrome
Google
Python
100T
7
10
虽然稍微复杂一点,因为我按价值对字典进行排序。
def sortname(k): return get[k]['NAME']
sortedbyname = sorted(get,key=sortname)
在两个答案都已发布后我才添加了100T,但接受的答案仍然适用于我在评论中发布的略微修改。为了澄清,应该对匹配^ [^ 0-9]的名称进行排序。
答案 0 :(得分:3)
我一直在努力让词典版本正常工作,所以这里是你推断的数组版本:
def sortkey(x):
try:
return (1, int(x))
except:
return (0, x)
sorted(get, key=sortkey)
基本原则是创建一个元组,它的第一个元素具有将所有字符串分组在一起然后所有整数的效果。不幸的是,没有优雅的方法可以确认字符串是否恰好是一个int而不使用异常,这在lambda中并不是很好。我的原始解决方案使用正则表达式,但自从从lambda转移到独立函数后,我想我也可以选择简单的选项。
答案 1 :(得分:1)
>>> l = ['7', 'Google', 'Chrome', '10', 'Python']
>>> sorted(l, key=lambda s: (s.isdigit(), s))
['Chrome', 'Google', 'Python', '10', '7']
Python的排序是稳定的,因此您也可以使用多个连续排序:
>>> m = sorted(l)
>>> m.sort(key=str.isdigit)
>>> m
['Chrome', 'Google', 'Python', '10', '7']