Python 使用生成器映射列表并将其转换为对象
我正在生成导航链接 目前我有一个字典列表:Python 使用生成器映射列表并将其转换为对象,python,Python,我正在生成导航链接 目前我有一个字典列表: nav_objects = [ { 'href': "http://somedomain.com", 'title': "Some Domain" }, { 'href': "http://somedomain2.com", 'title': "Some Domain 2" }, { 'href': "http://somedomain3.com", 'title': "Some Do
nav_objects = [
{
'href': "http://somedomain.com",
'title': "Some Domain"
},
{
'href': "http://somedomain2.com",
'title': "Some Domain 2"
},
{
'href': "http://somedomain3.com",
'title': "Some Domain 3"
}
{
'href': "http://somedomain4.com",
'title': "Some Domain 4"
}
]
我目前正在使用map()
循环此列表并生成导航链接
def gen_nav_item(nav_item):
return '<a href="{}">{}</a>'.format(nav_item['href'], nav_item['title'])
nav_items = map(gen_nav_item, nav_objects)
def gen_导航项目(导航项目):
返回“”。格式(导航项目['href'],导航项目['title'])
导航项目=地图(导航项目、导航对象)
这是因为它生成了一个字符串列表,我可以稍后在模板中打印出来。然而,我很好奇是否可以使用生成器函数,以及这是否是一种好的做法。
比如说
def nav_item_generator(nav_objects):
for nav_item in nav_items:
yield '<a href="{}">{}</a>'.format(nav_item['href'], nav_item['title'])
nav_items = nav_item_generator(nav_objects)
def导航项目生成器(导航对象):
对于导航项目中的导航项目:
产量“”。格式(导航项目['href'],导航项目['title'])
导航项目=导航项目生成器(导航对象)
您可以完全跳过一个特殊函数,只需使用列表理解或生成器表达式:
nav_items = ['<a href="{}">{}</a>'.format(x['href'], x['title']) for x in nav_objects]
nav_items=[''。nav_对象中x的格式(x['href'],x['title'])]
将最外层的括号更改为括号,使其成为惰性genexpr,而不是急切的listcomp
总的来说,如果您需要编写自己的函数来使用
map
,则不应使用map
;与使用listcomp或genexpr相比,它将更慢、更少的Pythonic<代码>映射仅在存在可直接使用的现有内置Python时才有用。您可以这样做。你的问题在哪里?