【问题标题】:Sorting a list of tuples without using lambda不使用 lambda 对元组列表进行排序
【发布时间】:2020-11-11 02:50:21
【问题描述】:

我还没有学习 python 中的“lambda”概念,我试图寻找答案,每个答案都包含 lambda。这是我的代码,你能建议我一种按值排序的方法吗?

sorted_dict = {'sir': '113', 'to': '146', 'my': '9', 'jesus': '4', 'saving': '275', 'changing': '72', 'apologize': '285', 'pain': '308', 'sisters': '27', 'forgiving': '36', 'can': '62', 'family': '77', 'sorry': '8', 'is': '360', 'too': '15', 'her': '37', 'wanted': '18', 'being': '44', 'into': '208', 'are': '17', 'just': '97', 'so': '148', 'now': '112', 'be': '19', 'right': '189', 'been': '105', 'no': '56', 'because': '74', 'forgive': '52', 'keep': '88', 'wish': '12', "i'm": '67', 'always': '53', 'ask': '29'}

new_list = list()
for key,value in sorted_dict.items():
    new_tup = (key, value)
    new_list.append(new_tup)

new_list = sorted(new_list)

我该如何继续?

【问题讨论】:

  • 你可以只使用常规函数定义

标签: python-3.x list sorting tuples


【解决方案1】:

lambda 通常用作对迭代器中的每个值进行排序的键。

将字典转换为元组列表的步骤相同,可以使用 dict 方法 dict.items() 完成。

我在排序中使用了 lambda,作为告诉排序函数的键,我想根据位于第一个索引中的每个元组中的值进行排序。

sorted_dict = {'sir': '113', 'to': '146', 'my': '9', 'jesus': '4', 'saving': '275', 'changing': '72', 'apologize': '285', 'pain': '308', 'sisters': '27', 'forgiving': '36', 'can': '62', 'family': '77', 'sorry': '8', 'is': '360', 'too': '15', 'her': '37', 'wanted': '18', 'being': '44', 'into': '208', 'are': '17', 'just': '97', 'so': '148', 'now': '112', 'be': '19', 'right': '189', 'been': '105', 'no': '56', 'because': '74', 'forgive': '52', 'keep': '88', 'wish': '12', "i'm": '67', 'always': '53', 'ask': '29'}

new_list = sorted_dict.items()

new_list = sorted(new_list, key=lambda x: int(x[1]))
print(new_list)

【讨论】:

  • 这工作得很好。但是为什么另一个答案不能以同样的方式工作呢?当我们创建一个函数然后使用 lambda 来使用它时有什么区别?
  • lambda 在处理一个线性函数时经常使用,或者为了便于使用。为一个小任务定义一个函数是一件很痛苦的事情,尤其是如果它只执行一次,它就会无缘无故地占用内存。
【解决方案2】:

如果您熟悉其他编程概念,您可能听说过所谓的“内联函数”...

Lambda 是 Python 中的“内联函数”等价物。

它是一个没有函数名的函数,并且被限制为只有一行代码。

现在来到排序问题,python中的排序函数接受两个参数,

  1. 要排序的列表
  2. 一个函数,您可以在其中定义如何对列表进行排序。

假设如果它是一个数字列表,你根本不需要第二个参数..

但是如果它像你的情况,它是一个元组列表或一个字典列表,你需要告诉 python 如何对该列表进行排序..

这是在排序函数中的“key”参数的帮助下完成的...

下面的代码是一个说明..

In [1]: l1 = [('a',1), ('b', 3), ('c', 2)]

In [2]: def sortHelper(x):
   ...:     return x[1]
   ...:

In [3]: l1.sort(key=sortHelper)

In [4]: l1
Out[4]: [('a', 1), ('c', 2), ('b', 3)]

In [5]:

现在如您所见,sortHelper 方法只是一个单行函数,可以很好地用lambda 函数编写。

lambda x: x[1]

所以使用 lambda 函数很常见,但它不是强制的。你也可以用普通的 python 函数完成相同的功能。

【讨论】:

  • 我试过这个,但问题没有解决。我需要按升序或降序对数字进行排序,但这里不是这样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多