Лямбда-фильтр список словарей Python - PullRequest
2 голосов
/ 16 января 2020

Я начал программировать с python некоторое время go У меня есть сомнения со словарем

У меня есть этот массив, и у меня уже есть метод, который получает массив идентификаторов, я пытался с лямбда создайте отфильтрованный список. Мой вопрос: если в дополнение к отфильтрованному списку я могу оставить в списке только необходимые атрибуты, как пример

пример:

 ages = [{'employedId': 1, 'age': 22},
         {'employedId': 2, 'age': 32},
         {'employedId': 3, 'age': 17},
         {'employedId': 4, 'age': 53},
         {'employedId': 5, 'age': 32},
         {'employedId': 6, 'age': 22}
         ]
list_filtred = list(filter(lambda tag: tag['age'] == 22, ages))

python output

[{'employedId': 1, 'age': 22}, 
 {'employedId': 6, 'age': 22}]

Можно ли создать метод лямбда-фильтрации, чтобы получить такой вывод, или мне нужно работать с массивом, чтобы создать новый список значений?

ожидаемый результат

[1,6]

Ответы [ 3 ]

4 голосов
/ 16 января 2020

Вы можете использовать понимание списка, чтобы получить доступ к значению, соответствующему клавише 'employedId' после того, как вы использовали 'age' для фильтрации.

>>> [tag['employedId'] for tag in ages if tag['age'] == 22]
[1, 6]
0 голосов
/ 16 января 2020

В качестве альтернативы, используя существующий оператор list, вы можете добавить оператор map, который захватит клавишу employedId:

from operator import itemgetter

list(map(itemgetter('employedId'), filter(lambda tag: tag['age'] == 22, ages)))
[1, 6]

В противном случае, я думаю, что ответ @ CoryKramer будет немного более читаемый

0 голосов
/ 16 января 2020

Функция filter сама по себе этого не сделает, но вы можете сделать это, используя функциональный декларативный стиль (а не императивный).

Например, для извлечения всех людей, чей возраст составляет 22 * ​​1004 *

list_filtered = list(filter(lambda tag: tag['age']==22, ages))

Лямбда-функции являются мощными инструментами; Вы можете построить множество условий.

Чтобы получить массив в нужном формате, попробуйте функцию map, которая использует аналогичные принципы, но вместо фильтрации массива применяет результат функции к каждому элементу в массиве.

list_filtered = list(map(lambda x: x['employedId'], ages))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...