对包含1级嵌套字典项的列表中的每个项应用相同的更新

时间:2017-09-15 06:44:21

标签: python json

我有一个包含字典对象的列表:

a = [{'name':'myname', cat:{id:1, link:'xyz'}}, {...}]

我想要做的是提取id内的cat,并将其分配给cat本身,并对列表中的所有字典项重复此操作:

a = [{'name':'myname', new_cat:1}, {...}]

我知道我可以使用for loop执行此操作:

new_a=[]
for item in a:
    x = {'name':item['name'], new_cat:item['cat']['id']}
    new_a.append(x)

我只是想知道是否有更有效的方法来做到这一点。例如,使用理解列表会更好地为此工作吗?

2 个答案:

答案 0 :(得分:1)

a = [{"name": item["name"], "cat": item["cat"]["id"]} for item in a]

这就是你想要的吗?

答案 1 :(得分:1)

你也可以使用maplambda(虽然它实际上不比list-comp更可读(或更快):

a = [{'name':'myname', 'cat':{'id':1, 'link':'xyz'}},{'name':'yourname', 'cat':{'id':2, 'link':'abc'}}]

a = map(lambda x: {'name':x['name'],'new_cat':x['cat']['id']}, a)
print a

>>> [{'name': 'myname', 'new_cat': 1}, {'name': 'yourname', 'new_cat': 2}]