【问题标题】:Sorting a list of two element tuples numerically and alphabetically按数字和字母顺序对两个元素元组的列表进行排序
【发布时间】:2016-03-04 18:05:40
【问题描述】:

我有一个任务,我必须从一个字符串创建一个元组列表。我通过使用 .split() 拆分字符串来做到这一点。然后我遍历列表并将项目和每个项目的重复次数添加到字典中,如下所示:

 for word in s:         
    if word in count_dict:
        count_dict[word] += 1
    else:
        count_dict[word] = 1

在此之后,我使用以下方法创建一个元组列表:

pairs = count_dict.items()

接着是:

count_list = []
for pair in pairs:
    count_list.append(pair)

count_list.sort(key=lambda x: x[1], reverse=True)

我按每个元组中最大 x[1] 元素的顺序排序并反转列表,以便我将重复次数最多的项目放在前面。我的实际任务是让重复次数最多的元素首先出现,并让重复次数相同的元素按字母顺序出现在最大元素的后面。

【问题讨论】:

    标签: python list python-2.7 sorting tuples


    【解决方案1】:

    另一种反转数字排序的方法是在键函数中将数字设为负数

    现在将第二个排序顺序组合成一个元组

    count_list.sort(key=lambda x: (-x[1], x[0]))
    

    reverse=True必须去掉,否则字母排序会颠倒。

    【讨论】:

      【解决方案2】:
      count_list.sort(key=lambda x: int(x[1]), reverse=True)
      

      lamba 按字母顺序处理数字字符串(在reverse 中,18 在 1503 之前)但按正确的数字顺序处理整数,因此将 x[1] 转换为整数就可以满足您的要求。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-04
        • 2015-06-30
        • 2013-10-04
        • 1970-01-01
        • 1970-01-01
        • 2022-01-26
        相关资源
        最近更新 更多