Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按大小写对元组中的元组进行排序_Python_Sorting_Python 2.7_Tuples - Fatal编程技术网

Python 按大小写对元组中的元组进行排序

Python 按大小写对元组中的元组进行排序,python,sorting,python-2.7,tuples,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')) 我想输出的不是这

你好!! 我有一个元组,看起来像这样:

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'))
我在谷歌上搜索了一下,找到了如何处理list对象,但它不适用于元组

对于元组的解决方案将不胜感激。谢谢

我想你是说

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

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

使用排序进行排序,并使用元组字符串的第一个字符的ord解决关系这也可以通过指定比较函数而不是键来完成

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)

许多使用列表的东西也可以使用元组。请链接您找到的解决方案或在此处显示。请发布您的实际代码。你的tup语法不正确在1'Hey',1'Hey'的情况下会发生什么?基本上,你在乎大写版本是否在小写版本之前吗?@user3611091你接受的答案不能回答你发布的问题,它把你放在前面Yo@merlin2011它不起作用。在发布这个问题之前,我查看了所有的解决方案:谢谢!!工作得很好!,也是这里最简单的解决方案:奇怪的是,这个解决方案是如何保证资本版本总是首先出现的?SoReToTUP,KEY=LAMBDA TUP:TUP(1)。上图,TUP(1)[0 ]。IsLead应该稍后通过排序小写版本来修复最后两个元素的问题。你是对的,我没有考虑字典排序与崩溃情况。我看到其他人纠正了这一点,因为这并不是真正正确的。
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)