您好! 我有一个看起来像这样的元组:
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
的解决方案将不胜感激。的谢谢!
答案 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)