有没有一种方法可以使用lamba函数从字典对象中提取值以添加到列表中?

时间:2019-06-12 18:20:49

标签: python dictionary lambda

我正在尝试使用lambda函数创建一个列表,该列表仅包含列表中特定键的值。

我有以下内容:

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 个答案:

答案 0 :(得分:4)

您用来创建names的函数非常多余:

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

您概述的控制流是“来自listdict条目中的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的每个成员,因此xdict。考虑到这一点,您正在对name使用直接访问来提取所需的内容。