Лямбда в словаре - PullRequest
       6

Лямбда в словаре

0 голосов
/ 10 октября 2019

Допустим, у меня есть список со словарем с id, score и key. Я хотел бы создать метод, возвращающий счет, заданный key с использованием лямбда-функций.

Этот метод достаточно проблематичен:

def my_search(txt):
    for i in my_dictionary:
        if i['key'] == txt:
            return i['score']

Но я бы хотел использовать лямбда-функциисделать это. Я пытался использовать лямбду с фильтром, но, похоже, он не работает. Как я могу продолжить?

У меня есть что-то вроде

[{'id': 1, 'score': 8.321, 'key': 'stv'}, {'id': 1, 'score': 6.321, 'key': 'mrk'} ... ]

Ответы [ 4 ]

0 голосов
/ 10 октября 2019
def my_search(txt):
    val = list(filter(lambda elem: elem[0] == txt ,my_dictionary.items()))
    return(val[0][1])

0 голосов
/ 10 октября 2019

Функция должна принимать функцию в качестве аргумента и вызывать функцию вместо выполнения сравнения.

def my_search(func):
    for i in my_dictionary:
        if func(i['key']):
            return i['score']

print(my_search(lambda k: k == txt))
0 голосов
/ 10 октября 2019

Вы можете преобразовать my_search в лямбда-функцию с помощью выражения генератора, подобного этому:

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
0 голосов
/ 10 октября 2019
txt = 'a'
d = {'a':'b'}
>>> [v for k,v in d.items() if k==txt]
['b']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...