将嵌套的python词典分成2个单独的词典

时间:2016-11-24 06:59:45

标签: python-2.7 dictionary

所以我在python中有一个嵌套字典,如下所示:

{'name': 'Waffles',
 'subCategories': [{'menu': [{'name': 'Fig & Honey with Fresh Cream','price': 120},
                             {'name': 'Toffeed Banana', 'price': 110}],
                    'name': 'Sweet',
                    'description': 'Sweet and yummy'},

                   {'menu': [{'name': 'Mushroom Cheese Gratin','price': 175},
                             {'name': 'Pepper Chicken Waffle', 'price': 180}],
                   'name': 'Savoury'
                   'description' : 'Salty and yummy'}]
}

我所看到的是将dict分为2个dicts,如下所示:

{'name': 'Waffles(Sweet)',
 'menu': [{'name': 'Fig & Honey with Fresh Cream','price': 120},
          {'name': 'Toffeed Banana', 'price': 110}],
 'description' : 'Sweet and yummy'} 

{'name': 'Waffles(Savoury)',
 'menu': [{'name': 'Mushroom Cheese Gratin','price': 175},
          {'name': 'Pepper Chicken Waffle', 'price': 180}],
 'description': 'Salty and yummy'}

请注意,名称键是外部和内部词组中相同键的组合

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

2 个答案:

答案 0 :(得分:1)

希望代码是自我解释的!

import pprint
d = {'name': 'Waffles',
     'subCategories': [
         {'menu': [{'name': 'Fig & Honey with Fresh Cream','price': 120},
                             {'name': 'Toffeed Banana', 'price': 110}],
                    'name': 'Sweet',
                    'description': 'Sweet and yummy'},
         {'menu': [{'name': 'Mushroom Cheese Gratin','price': 175},
                             {'name': 'Pepper Chicken Waffle', 'price': 180}],
                   'name': 'Savoury',
                   'description' : 'Salty and yummy'}]
}

menu = []
for category in d.get('subCategories', []):
    category['name'] =  "{}({})".format(d['name'], category.get('name', ''))
    menu.append(category)


pprint.pprint(menu)

和示例输出

[{'description': 'Sweet and yummy',
  'menu': [{'name': 'Fig & Honey with Fresh Cream', 'price': 120},
           {'name': 'Toffeed Banana', 'price': 110}],
  'name': 'Waffles(Sweet)'},
 {'description': 'Salty and yummy',
  'menu': [{'name': 'Mushroom Cheese Gratin', 'price': 175},
           {'name': 'Pepper Chicken Waffle', 'price': 180}],
  'name': 'Waffles(Savoury)'}]

答案 1 :(得分:0)

这是执行您要求的代码。请注意,它可以进行优化,但保留原样以便于阅读。

dict = #your dictionary
# list to hold your new dictionaries (if there are more than one)
dict_list = []
# loop to extract
for item in dict['subCategories']:
    d = {}
    id = item['name']
    # this could be made more compact
    d.update({'name':'Waffles('+id+')'})
    d.update({'menu':item['menu']})
    d.update({'description':item['description']})
    dict_list.append(d)
# print new dictionaries
for i in dict_list:
    print(i)

请注意,如果需要,可以使程序更加健壮以处理任意yamls(或者json,我不知道这个字典来自哪种格式)。这里提取的密钥是硬编码的。

祝你好运!

ps:您的起始词典中存在格式错误