通过大小写对元组中的元组进行排序

时间:2014-08-05 23:22:23

标签: python sorting python-2.7 tuples

您好! 我有一个看起来像这样的元组:

tup = ((3,'Ne'),(7,'yo'),(1,'Hey'),(3,'ne'),(7,'Yo'),(1,'hey'))

我正在用它来按abc ..:

对它进行排序
sorted(tup, key=lambda tup: tup[1])

问题在于它超越了这个:

>>> print tup
>>> ((1,'Hey'),(3,'Ne'),(7,'Yo'),(1,'hey'),(3,'ne'),(7,'yo'))

而不是这个(这是我想要输出的):

>>> print tup
>>> ((1,'Hey'),(1,'hey'),(3,'Ne'),(3,'ne'),(7,'Yo'),(7,'yo'))

我用Google搜索,并找到了如何使用list对象执行此操作,但它不适用于元组。

tuple的解决方案将不胜感激。的谢谢!

3 个答案:

答案 0 :(得分:2)

我认为你的意思是

tup = ((3,'Ne'),(7,'yo'),(1,'Hey'),(3,'ne'),(7,'Yo'),(1,'hey'))

并且需要

sorted(tup, key=lambda tup: tup[1].upper())

答案 1 :(得分:0)

 sorted(tup, key=lambda x: (x[1].upper(),ord(x[1][0])))

In [2]: tup = ((3,'Ne'),(7,'yo'),(1,'Hey'),(3,'ne'),(7,'Yo'),(1,'hey'))

In [3]: sorted(tup, key=lambda x: (x[1].upper(),ord(x[1][0])))
Out[3]: [(1, 'Hey'), (1, 'hey'), (3, 'Ne'), (3, 'ne'), (7, 'Yo'), (7, 'yo')]

使用元组字符串的第一个ord的{​​{1}}对已排序和结算进行排序

答案 2 :(得分:0)

也可以指定比较函数而不是键来完成。

tup = ((3,'Ne'),(7,'yo'),(1,'Hey'),(3,'ne'),(7,'Yo'),(1,'hey'))

def compare(item1, item2):
    if item1[1].lower() < item2[1].lower():
       return -1
    elif item1[1].lower() > item2[1].lower():
       return 1
    else: 
       return -1 if item1[1] < item2[1] else 1

tup = sorted(tup, cmp=compare)
print(tup)