получить список конкретных значений из списка словарей без использования циклов for или, если условия только при необходимости - PullRequest
0 голосов
/ 17 января 2019

Скажите, у меня есть список словарей.

listOfDict = [{"name": "Joel","Age": "10","Grade": "A"},{"name": "Adam","Age": "11","Grade": "B"},{"name": "Rachel","Age": "10","Grade": "B"}]

Я хочу получить список имен, возраст которых равен 10. Поэтому вывод будет выглядеть следующим образом.

listOfNames = ["Joel", "Rachel"]

Есть ли способ сделать это без использования циклов или условий. Я пытался использовать функцию лямбда, но безрезультатно.

Ответы [ 4 ]

0 голосов
/ 17 января 2019

Существует способ использовать лямбда-функции вместе с map и filter для получения желаемого результата без использования ни for петли, ни условия if, но код будет немного трудно читать:

listOfDict = [{"name": "Joel","Age": "10","Grade": "A"},{"name": "Adam","Age": "11","Grade": "B"},{"name": "Rachel","Age": "10","Grade": "B"}]

listOfNames = list(map(lambda elem: elem['name'], list(filter(lambda elem: elem['Age']=="10",listOfDict))))

print(listOfNames)

Результат:

['Joel', 'Rachel']
0 голосов
/ 17 января 2019

Это работает.

Использование лямбды:

result = list(map(lambda x: x['name'] if x['Age'] == "10" else None, listOfDict ))
result = [x for x in result if x is not None]
print(result)
0 голосов
/ 17 января 2019

Нет for петли или if условия с использованием pandas.DataFrame:

import pandas as pd
df=pd.DataFrame.from_dict(listOfDict)
result=df[df['Age']=='10']['name'].tolist()

OUTPUT

['Joel', 'Rachel']
0 голосов
/ 17 января 2019

Есть ли способ сделать это без использования циклов for или, если условия

Нет, нет!

Используйте петлю. Это неизбежно на некотором уровне. Используя понимание списка:

res = [d['name'] for d in listOfDict if d['Age'] == '10']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...