Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
排序:在Python 2中如何处理大于字母的特殊字符?_Python_List_Python 2.7_Sorting - Fatal编程技术网

排序:在Python 2中如何处理大于字母的特殊字符?

排序:在Python 2中如何处理大于字母的特殊字符?,python,list,python-2.7,sorting,Python,List,Python 2.7,Sorting,目前Pythonsort()和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'] 我想要如下字符:!@$%^&*可以排序为大于字母顺序的字符。 谢谢 编辑: 除了公认的答案之外,

目前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']

函数返回两个值,第一个值是布尔值,用于检查字符串中是否存在任何特殊字符,第二个值是替换字符串本身

>>> 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')]

太好了,我还发现使用
sorted(a,reverse=True,key=lambda s:s.upper())
可以解决这个问题,但我不知道为什么使用
s.lower()