我有一个公司名称为密钥的字典。这些值是两件事的命名元组。具有到公司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>
答案 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))]