所以我列表的嵌套字典称为dict1如下:Else子句有两个回路
{"types": [{"name": "Chinese",
"sub":
[{
"menu": [{"name": "Ya", "cost": 1}, {"name": "Ja", "cost": 2}],
"name": "Soups"
},
{
"menu": [{"name": "Ta", "cost": 3}, {"name": "Ba", "cost": 4}],
"name": "Mains"
}]
},
{"name": "Indian(Mains)",
"menu": [{"name": "Sa", "cost": 5}, {"name": "Pa", "cost": 6}]
}
]
}
我最后需要的是:
{"types": [{"name": "Chinese(Soups)",
"menu": [{"name": "Ya", "cost": 1}, {"name": "Ja", "cost": 2}]},
{"name": "Chinese(Mains)",
"menu": [{"name": "Ta", "cost": 3}, {"name": "Ba", "cost": 4}]},
{"name": "Indian(Mains)",
"menu": [{"name": "Sa", "cost": 5}, {"name": "Pa", "cost": 6}]}
]
}
所以在总结,如果内部字典包含密钥,则将其分离为单独的字符串,否则保持原样。对于最有名的给我,我使用列表解析this.This原因是我至今:
dict1['types'] = [{'name': '%s(%s)' % (outer['name'], inner['name']),
'menu': inner['menu']}
for outer in dict1['types']
if 'sub' in outer
for inner in outer['sub']]
这给了我下面的输出:
{"types": [{"name": "Chinese(Soups)",
"menu": [{"name": "Ya", "cost": 1}, {"name": "Ja", "cost": 2}]},
{"name": "Chinese(Mains)",
"menu": [{"name": "Ta", "cost": 3}, {"name": "Ba", "cost": 4}]}
]
}
很明显,它给我只有2个字符,而不是3,这是显而易见的,因为我没有其他子句。我的问题是,如何在列表理解中使用else子句,并在此场景中使用两个循环?
编辑 正如马亭在评论中提到的,这是不可能的名单理解,我行与实现这一以及通过修改现有的字典
在列表理解循环中'if'只能*过滤*(排除)项目。没有'else'选项,因为包含一个项目是默认的。 –
@Martijn彼得斯...请问,请让我知道什么是最好的方式来完成这一点,而不创建一个新的字典和修改现有的字典? – Amistad