2016-11-24 239 views
0

類型的字典,所以我有嵌套Python列表如下:拆分字典的嵌套Python列表到2個字典

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

我想什麼是分離出類型的字典內部列表中,最終得到這樣的:

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

有些事情要注意的是:

  • 關鍵是內部和外部名的組合關鍵
  • 類型關鍵是列表,可以有超過1元,因此答案,應該最好這種情況下

的護理是什麼接近這個最好的方法?

回答

2

我不確定你是否真的想要這樣的方式,但在這裏你是。

{'types': [ 
    {'name': '%s(%s)' % (outer['name'], inner['name']), 
    'menu': inner['menu']} 
    for outer in original_dict['types'] 
    for inner in outer['sub']]} 

UPD:如果你想在原來的字典進行更新,你可以做到這一點是這樣的:

original_dict['types'] = [ 
    {'name': '%s(%s)' % (outer['name'], inner['name']), 
    'menu': inner['menu']} 
    for outer in original_dict['types'] 
    for inner in outer['sub']] 
+0

這將創建一個新的字典altogether..is它通過更改要做到這一點可能現有的字典? – Amistad

+0

@Amistad,新字典有什麼問題?你真的需要修改完全相同的字典對象嗎?就我個人而言,我不會在乎性能或內存問題,只會將新字典分配給現有變量:original_dict = {'types':[... in original_dict ...]} –

+0

問題是這個問題是這是我正在嘗試解決的一個更大問題的子集。修改現有字典而不創建新字典將有助於更快地解決更大的問題。 – Amistad