Есть ли способ извлечь только значения из словарного объекта для добавления в список, используя функцию lamba? - PullRequest
0 голосов
/ 12 июня 2019

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

У меня есть следующее:

names = None
names = list(map(lambda restaurant: dict(name=restaurant['name']
                                          ).values(), yelp_restaurants))
names

# This is what I want for the list:
# ['Fork & Fig',
#  'Salt And Board',
#  'Frontier Restaurant',
#  'Nexus Brewery',
#  "Devon's Pop Smoke",
#  'Cocina Azul',
#  'Philly Steaks',
#  'Stripes Biscuit']

Однако я получаю следующее:

[dict_values(['Fork & Fig']),
 dict_values(['Salt And Board']),
 dict_values(['Frontier Restaurant']),
 dict_values(['Nexus Brewery']),
 dict_values(["Devon's Pop Smoke"]),
 dict_values(['Cocina Azul']),
 dict_values(['Philly Steaks']),
 dict_values(['Stripes Biscuit'])]

Есть ли способ передать только значения, исключив избыточный префикс dict_values?

1 Ответ

4 голосов
/ 12 июня 2019

Функция, которую вы используете для создания names, исключительно избыточна:

names = list(map(lambda restaurant: dict(name=restaurant['name']
                                          ).values(), yelp_restaurants))

Обрисованный вами поток управления "из list из dict записей, называемых yelp_restaurants,Я хочу создать dict каждого name, получить значения из каждого dict и поместить его в list. "

Почему?Не зацикливайтесь на функциях lambda.Начните с простого, как цикл for:

names = []

for restaurant in yelp_restaurants:
    names.append(restaurant['name'])

Посмотрите, насколько это проще.Он делает именно то, что вы хотите, просто получите name и поместите его в список.Вы можете поместить это в понимание списка:

names = [restaurant['name'] for restaurant in yelp_restaurants]

Или, если вам действительно нужно использовать lambda, теперь гораздо проще увидеть, чего вы на самом деле хотите достичь

names = list(map(lambda x: x['name'], yelp_restaurants))

Помните, что x в lambda x: - это каждый элемент повторяемого yelp_restaurants, поэтому x - это dict.Имея это в виду, вы используете прямой доступ к name для извлечения того, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...