比方说,我有一个包含字典的列表,其中包含id
,score
和key
。我想创建一种方法,使用lambda函数返回给定key
的分数。
此方法足以解决问题:
def my_search(txt):
for i in my_dictionary:
if i['key'] == txt:
return i['score']
但是我想使用lambda函数来做到这一点。我尝试将lambda与过滤器配合使用,但似乎无法正常工作。我该怎么办?
我有类似的东西
[{'id': 1, 'score': 8.321, 'key': 'stv'}, {'id': 1, 'score': 6.321, 'key': 'mrk'} ... ]
答案 0 :(得分:4)
def my_search(txt):
val = list(filter(lambda elem: elem[0] == txt ,my_dictionary.items()))
return(val[0][1])
答案 1 :(得分:0)
该函数应将一个函数作为参数,然后调用该函数而不是执行比较。
def my_search(func):
for i in my_dictionary:
if func(i['key']):
return i['score']
print(my_search(lambda k: k == txt))
答案 2 :(得分:0)
您可以使用生成器表达式将my_search
转换为lambda函数:
my_search = lambda txt: next(i['score'] for i in my_dictionary if i['key'] == txt)
所以给定:
my_dictionary = [
{'id': 1, 'score': 8.321, 'key': 'stv'},
{'id': 1, 'score': 6.321, 'key': 'mrk'}
]
my_search('mrk')
将返回:
6.321
答案 3 :(得分:-1)
txt = 'a'
d = {'a':'b'}
>>> [v for k,v in d.items() if k==txt]
['b']