簡體   English   中英

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

[英]Sort: How to treat special character greater than alphabetical in Python 2?

目前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函數返回兩個值,第一個是布爾檢查字符串中是否存在任何特殊字符,第二個是替換字符串本身。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM