2015-08-03 3 views
0

Это мой код:Как сделать двухуровневую вложенную карту

html_tags = [{'tag': 'a', 
       'attribs': [('class', 'anchor'), 
          ('aria-hidden', 'true')]}] 

Я просто не могу это сделать одним уровнем для цикла и карты одноуровневой как следующие:

for index, tag in enumerate(html_tags): 
    html_tags[index]['attribs'] = map(lambda x: '@{}="{}"'.format(*x), tag['attribs']) 
print html_tags 

Тем не менее, это мой выход (результат):

[{'attribs': ['@class="anchor"', '@aria-hidden="true"'], 'tag': 'a'}] 

Как сделать двухуровневую вложенную карту и выход тот же результат.

+0

Что вы ожидаемый результат? –

ответ

1

Я предлагаю словарь понимания:

>>> html_tags = [{i:map(lambda x: '@{}="{}"'.format(*x), j) if i=='attribs' else j for i,j in html_tags[0].items()}] 
>>> html_tags 
[{'attribs': ['@class="anchor"', '@aria-hidden="true"'], 'tag': 'a'}] 
>>> 

Кроме того, вместо использования map с lambda как более эффективным способом, вы можете использовать список понимание:

>>> html_tags = [{i:['@{}="{}"'.format(*x) for x in j] if i=='attribs' else j for i,j in html_tags[0].items()}] 
>>> html_tags 
[{'attribs': ['@class="anchor"', '@aria-hidden="true"'], 'tag': 'a'}] 
>>>