将嵌套的python词典列表拆分为2个词典

时间:2016-11-24 09:44:57

标签: python-2.7 list dictionary

所以我有如下嵌套python的dicts列表:

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

我想要的是将内部列表中的dicts分离出来,最终得到这个:

{"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 个答案:

答案 0 :(得分: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']]