【问题标题】:Sort: How to treat special character greater than alphabetical in Python 2?排序:如何在 Python 2 中处理大于字母的特殊字符?
【发布时间】:2015-10-15 21:47:51
【问题描述】:

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

【问题讨论】:

    标签: python list python-2.7 sorting


    【解决方案1】:

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

    所以,本质上我们是这样排序的:

    >>> 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() 会发生这种情况
    猜你喜欢
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 2019-12-01
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    相关资源
    最近更新 更多