在Python中对名字列表排序,忽略数字?

2024-10-01 17:24:10 发布

您现在位置:Python中文网/ 问答频道 /正文

['7', 'Google', '100T', 'Chrome', '10', 'Python']

我希望结果是所有的数字在最后,其余的排序。数字不需要排序。

^{pr2}$

不过要稍微复杂一点,因为我是按值对字典进行排序的。在

def sortname(k): return get[k]['NAME']
sortedbyname = sorted(get,key=sortname)

我只添加了100吨后,两个答案都已张贴,但接受的答案仍然工作略有修改,我张贴在评论。为了澄清,应该对匹配^[^0-9]的名称进行排序。在


Tags: key答案namegetreturn字典排序def
2条回答

我一直在努力让字典版本正常工作,所以下面是数组版本供您推断:

def sortkey(x):
    try:
        return (1, int(x))
    except:
        return (0, x)

sorted(get, key=sortkey)

基本原理是创建一个元组,它的第一个元素具有将所有字符串分组,然后将所有整数分组的效果。不幸的是,在不使用异常的情况下,没有一种优雅的方法来确认一个字符串是否恰好是一个int,这在lambda中不是很好。我最初的解决方案使用了regex,但是由于从lambda转换为独立函数,我想我还是选择简单的选项。在

>>> l = ['7', 'Google', 'Chrome', '10', 'Python']
>>> sorted(l, key=lambda s: (s.isdigit(), s))
['Chrome', 'Google', 'Python', '10', '7']

Python的排序是稳定的,因此您还可以使用多个连续排序:

^{pr2}$

相关问题 更多 >

    热门问题