所以我列表的嵌套字典稱爲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