不区分大小写的列表sorting,而不会降低结果?
我有这样的string列表:
['Aden', 'abel']
我想sorting的项目,不区分大小写。 所以我想得到:
['abel', 'Aden']
但是我得到了sorted()
或list.sort()
,因为大写字母出现在小写字母之前。
我怎么能忽略这个案子? 我已经看到涉及降低所有列表项目的解决scheme,但我不想更改列表项目的情况。
以下Python 2的作品:
sorted_list = sorted(unsorted_list, key=lambda s: s.lower())
它适用于普通和unicodestring,因为它们都有一个lower
方法。
在Python 2中,它适用于普通string和Unicodestring的混合,因为两种types的值可以相互比较。 Python 3不能这样工作,但是:你不能比较一个字节string和一个unicodestring,所以在Python 3中你应该做的是理智的事情,只对一种types的string进行sorting。
>>> lst = ['Aden', u'abe1'] >>> sorted(lst) ['Aden', u'abe1'] >>> sorted(lst, key=lambda s: s.lower()) [u'abe1', 'Aden'] >>>
>>> 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']
你也可以试试这个:
>>> x = ['Aden', 'abel'] >>> x.sort(key=lambda y: y.lower()) >>> x ['abel', 'Aden']
在python3中,你可以使用
list1.sort(key=lambda x: x.lower()) #Case In-sensitive list1.sort() #Case Sensitive
我为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)
尝试这个
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']