【问题标题】:Sort tuple in tuple by upper and lower case按大小写对元组中的元组进行排序
【发布时间】:2014-08-05 23:22:22
【问题描述】:

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

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 对象执行此操作,但它不适用于元组。

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

【问题讨论】:

  • 许多适用于list 的东西也适用于tuple。请链接您找到的解决方案或在此处显示。
  • 请发布您的实际代码。您的 tup 语法不正确
  • (1, 'Hey'), (1, 'hEy'))的情况应该怎么办?基本上,您是否关心大写版本是否在小写版本之前?
  • @user3611091 你接受的答案没有回答你发布的问题,它把yo放在Yo之前
  • @merlin2011 它没有用。在发布这个问题之前,我查看了所有解决方案:)

标签: python sorting python-2.7 tuples


【解决方案1】:

我想你是说

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

需要

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

【讨论】:

  • 谢谢!!工作得很好!,也是这里最简单的解决方案。 :)
  • 只是好奇,这个方案怎么保证大写版本总是先出现?
  • sorted(tup, key=lambda tup: (tup[1].upper(), tup[1][0].islower())) 应该通过稍后对小写版本进行排序来解决最后两个元素的问题。
  • 你说得对,我没有考虑字典排序与折叠大小写。我看到其他人纠正了这一点,因为这并不正确。
【解决方案2】:
 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')]

使用 sorted 进行排序,并使用元组字符串的第一个 charord 解决关系

【讨论】:

    【解决方案3】:

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

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-03
      • 1970-01-01
      • 2017-08-21
      相关资源
      最近更新 更多