在SORT中使用Lambda作为Key函数

时间:2018-02-04 04:59:17

标签: python lambda namedtuple

我有一个公司名称为密钥的字典。这些值是两件事的命名元组。具有到公司URL和等级的链接的实体具有数值。我想根据价值,特别是等级对这本字典进行排序。我试图使用key函数作为key = lambda(k,v):v.grade。但我收到一个错误指向lambda关键字旁边的括号。代码段如下。有人可以帮忙吗?

sorted_dict = sorted(list(dict_interested_companies.items()),key = lambda(k,v):v.grade)

例如,显示dict.items()的值

[('Google',named_tuple(entity ='http://money.cnn.com/video/technology/2018/02/01/kevin-abosch-i-am-a-coin.cnnmoney/index.html',grade = 45)),('Comcast',named_tuple(entity ='http://money.cnn.com/2018/02/02/pf/college/public-service-student-loan-forgiveness/index.html',grade = 39))< / p>

2 个答案:

答案 0 :(得分:0)

关键功能不应该带两个参数。它总是将采取一个参数。恰好在这种情况下,参数是一个2元组,但它仍然是一个参数。

# This is a function taking two arguments,
# *not* a function taking a tuple.
lambda k, v: v.grade

# This is equivalent to the above in Python
# 2 but has been disallowed in Python 3. Don't
# use this syntax; it's not portable.
lambda (k, v): v.grade

# This is a function taking one argument, a tuple,
# and using its second element. This is what you want.
lambda x: x[1].grade

答案 1 :(得分:0)

如果您想避免使用数字索引,可以使用嵌套的lambda和upacking:

from collections import namedtuple

named_tuple = namedtuple('named_tuple', ['entity', 'grade'])

dict_interested_companies = {
    'Google': named_tuple(entity='http://money.cnn.com/video/technology/2018/02/01/kevin-abosch-i-am-a-coin.cnnmoney/index.html', grade=45),
    'Comcast': named_tuple(entity='http://money.cnn.com/2018/02/02/pf/college/public-service-student-loan-forgiveness/index.html', grade=39)
}

sorted_list = sorted(dict_interested_companies.items(), key=lambda item: (lambda key, value: value.grade)(*item))

print(sorted_list)

<强>输出

[('Comcast', named_tuple(entity='http://money.cnn.com/2018/02/02/pf/college/public-service-student-loan-forgiveness/index.html', grade=39)), ('Google', named_tuple(entity='http://money.cnn.com/video/technology/2018/02/01/kevin-abosch-i-am-a-coin.cnnmoney/index.html', grade=45))]