2016-10-27 28 views
-1

我正在生成導航鏈接。使用生成器來映射列表並將它們轉換爲對象

目前,我有一個字典列表:我目前使用map()循環這個名單

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" 
    } 
] 

,並生成導航鏈接

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 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) 
+2

你可以做到這一點。你的問題在哪裏? – L3viathan

回答

1

你可以完全跳過一個特殊功能,只需使用列表理解或發電機的表達:

nav_items = ['<a href="{}">{}</a>'.format(x['href'], x['title']) for x in nav_objects] 

更改最外面的括號括號,使之成爲懶惰genexpr,而不是一個急於listcomp。

總的來說,如果你需要編寫自己的函數使用map,你不應該使用map;它會比使用listcomp或genexpr更慢,更少Pythonic。 map僅在您可以直接使用現有的內置Python的情況下才有用。

相關問題