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)