huy*_*ygn 6 python sorting list python-2.7
目前Python sort()并sorted()给我这个:
>>> sorted(a, reverse=True, key=lambda s: re.sub('[\[\]]', '', s).lower())
[u'Category123', u'[Cat@123]', u'CAT']
Run Code Online (Sandbox Code Playgroud)
但是我需要:
[u'[Cat@123]', u'Category123', u'CAT']
Run Code Online (Sandbox Code Playgroud)
我想要像以下字符:!@#$%^&*可以排序为大于字母字符.谢谢.
编辑: 除了接受的答案,我发现这将解决我的问题:
>>> sorted(a, reverse=True, key=lambda s:s.upper())
[u'[Cat@123]', u'Category123', u'CAT']
Run Code Online (Sandbox Code Playgroud)
从key函数返回两个值,第一个是布尔检查字符串中是否存在任何特殊字符,第二个是替换字符串本身.
>>> 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']
Run Code Online (Sandbox Code Playgroud)
所以,基本上我们正在这样排序:
>>> new_lst = [(False, 'category123'), (True, 'cat@123'), (False, 'cat')]
>>> sorted(new_lst, reverse=True)
[(True, 'cat@123'), (False, 'category123'), (False, 'cat')]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
990 次 |
| 最近记录: |