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时才有用。

您可以这样做。你的问题在哪里?