【问题标题】:Split a nested python list of dictionaries into 2 dictionaries将嵌套的 Python 字典列表拆分为 2 个字典
【发布时间】:2016-11-24 09:44:57
【问题描述】:

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

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

需要注意的是:

  • 新的 name 键是内部和外部 name 键的组合
  • types 键是一个列表,可以包含 1 个以上的元素,因此理想情况下,答案应该考虑到这种情况

解决这个问题的最佳方法是什么?

【问题讨论】:

    标签: python-2.7 list dictionary


    【解决方案1】:

    我不确定你是否真的想要这样,但你来了。

    {'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']]
    

    【讨论】:

    • 这完全创建了一个新的字典。是否可以通过更改现有的字典来做到这一点?
    • @Amistad,新字典有什么问题?你真的需要修改完全相同的字典对象吗?就个人而言,我不会在这里关心性能或内存问题,只需将新字典分配给现有变量: original_dict = {'types': [... in original_dict...]}
    • 问题是这个问题是我试图解决的一个更大问题的一个子集。修改现有的字典而不创建新的将有助于更快地解决更大的问题..
    猜你喜欢
    • 2021-12-09
    • 2021-09-09
    • 1970-01-01
    • 2011-05-04
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2018-10-04
    相关资源
    最近更新 更多