python - 不区分大小写的列表排序,而不降低结果?
我有一个像这样的字符串列表:
['Aden', 'abel']
我想对项目进行排序,不区分大小写。所以我想得到:
['abel', 'Aden']
但我与sorted()或list.sort()相反,因为大写字母出现在小写之前。
我怎么能忽略这个案子呢? 我已经看到了涉及降低所有列表项的小写的解决方案,但我不想更改列表项的大小写。
6个解决方案
144 votes
以下适用于Python 2:
sorted_list = sorted(unsorted_list, key=lambda s: s.lower())
它适用于普通和unicode字符串,因为它们都有str.lower方法。
在Python 2中,它适用于普通字符串和unicode字符串的混合,因为这两种类型的值可以相互比较。 但是Python 3不能像这样工作:你无法比较字节字符串和unicode字符串,所以在Python 3中你应该做的是理智的事情,只对一种字符串的列表进行排序。
>>> lst = ['Aden', u'abe1']
>>> sorted(lst)
['Aden', u'abe1']
>>> sorted(lst, key=lambda s: s.lower())
[u'abe1', 'Aden']
从python 3.3开始,还有str.lower方法专为无壳匹配而设计,可用于代替str.lower:
sorted_list = sorted(unsorted_list, key=lambda s: s.casefold())
jpp answered 2019-07-26T21:30:16Z
41 votes
>>> x = ['Aden', 'abel']
>>> sorted(x, key=str.lower) # Or unicode.lower if all items are unicode
['abel', 'Aden']
在Python 3中,str是unicode,但在Python 2中,您可以使用这种更通用的方法,它适用于str和unicode:
>>> sorted(x, key=lambda s: s.lower())
['abel', 'Aden']
jamylak answered 2019-07-26T21:30:41Z
9 votes
你也可以试试这个:
>>> x = ['Aden', 'abel']
>>> x.sort(key=lambda y: y.lower())
>>> x
['abel', 'Aden']
Ashwini Chaudhary answered 2019-07-26T21:31:00Z
3 votes
在python3中你可以使用
list1.sort(key=lambda x: x.lower()) #Case In-sensitive
list1.sort() #Case Sensitive
major answered 2019-07-26T21:31:25Z
1 votes
我这样做是为了Python 3.3:
def sortCaseIns(lst):
lst2 = [[x for x in range(0, 2)] for y in range(0, len(lst))]
for i in range(0, len(lst)):
lst2[i][0] = lst[i].lower()
lst2[i][1] = lst[i]
lst2.sort()
for i in range(0, len(lst)):
lst[i] = lst2[i][1]
然后你就可以调用这个函数:
sortCaseIns(yourListToSort)
Alexey Gorozhanov answered 2019-07-26T21:31:56Z
-2 votes
试试这个
def cSort(inlist, minisort=True):
sortlist = []
newlist = []
sortdict = {}
for entry in inlist:
try:
lentry = entry.lower()
except AttributeError:
sortlist.append(lentry)
else:
try:
sortdict[lentry].append(entry)
except KeyError:
sortdict[lentry] = [entry]
sortlist.append(lentry)
sortlist.sort()
for entry in sortlist:
try:
thislist = sortdict[entry]
if minisort: thislist.sort()
newlist = newlist + thislist
except KeyError:
newlist.append(entry)
return newlist
lst = ['Aden', 'abel']
print cSort(lst)
产量
['abel', 'Aden']
Mirage answered 2019-07-26T21:32:24Z