我正在尝试使用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”前缀?
答案 0 :(得分:4)
您用来创建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
使用直接访问来提取所需的内容。