作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
目前 Python sort()
和 sorted()
给我这个:
>>> sorted(a, reverse=True, key=lambda s: re.sub('[\[\]]', '', s).lower())
[u'Category123', u'[Cat@123]', u'CAT']
但我需要:
[u'[Cat@123]', u'Category123', u'CAT']
我想要像这样的字符:!@#$%^&*
可以被排序为大于字母字符。谢谢。
编辑:除了公认的答案外,我发现这可以解决我的问题:
>>> sorted(a, reverse=True, key=lambda s:s.upper())
[u'[Cat@123]', u'Category123', u'CAT']
最佳答案
从 key
函数返回两个值,第一个是 bool 值,检查字符串中是否存在任何特殊字符,第二个是被替换的字符串本身。
>>> def func(s):
subbed = re.sub('[\[\]]', '', s).lower()
return any(c in '!@#$%^&*' for c in s), subbed
...
>>> lst = [u'Category123', u'[Cat@123]', u'CAT']
>>> sorted(lst, reverse=True, key=func)
[u'[Cat@123]', u'Category123', u'CAT']
所以,基本上我们是这样排序的:
>>> new_lst = [(False, 'category123'), (True, 'cat@123'), (False, 'cat')]
>>> sorted(new_lst, reverse=True)
[(True, 'cat@123'), (False, 'category123'), (False, 'cat')]
关于python - 排序 : How to treat special character greater than alphabetical in Python 2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31623777/
我是一名优秀的程序员,十分优秀!