不区分大小写的列表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中,您可以使用这种对strunicode都适用的更一般的方法:

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