根据嵌套字典的子集字典创建字典

时间:2019-12-18 13:29:45

标签: python-3.x dictionary

必须使用一些动态控件从字典的子集字典中构建新的字典。 输入数据:

default_data = {
   'Common':{'name': "Trey", 'website': "http://treyhunner.com"},
   'api1_data':{
       'v1':{'name': "Anonymous User_v1", 'page_name': "Profile Page"},
       'v2': {'name': "Anonymous User_v2", 'page_name': "Profile Page"}},

   'api1_op': [],

   'api2_data':{
       'v1':{'name': "Anonymous User_v1", 'page_name': "Profile Page"},
       'v2': {'name': "Anonymous User_v2", 'page_name': "Profile Page"}},

   'api2_op': [],

   'api3_data':{'name1': "dmm", 'website1': "http://"}
}

用户控件: 每个api的版本:基于api版本(v1 / v2),它应该形成一个以key作为父键的字典。

预期输出:

op= {'Common':{'name': "Trey", 'website': "http://treyhunner.com"},
     'api1_data': {'name': "Anonymous User_v1", 'page_name': "Profile Page"},
     'api1_op': [],
     'api2_data': {'name': "Anonymous User_v2", 'page_name': "Profile Page"},
     'api2_op': [],
     'api3_data':{'name1': "dmm", 'website1': "http://"}
}

1 个答案:

答案 0 :(得分:0)

以下代码将获取用户选择的版本,并根据他的选择创建一个词典。

请注意,如果用户输入了不允许的版本(非“ v1”或“ v2”),则会引发RuntimeError

api_allowed_version = {'v1', 'v2'}
default_data = {
   'Common':{'name': "Trey", 'website': "http://treyhunner.com"},
   'api1_data':{
       'v1':{'name': "Anonymous User_v1", 'page_name': "Profile Page"},
       'v2': {'name': "Anonymous User_v2", 'page_name': "Profile Page"}},

   'api1_op': [],

   'api2_data':{
       'v1':{'name': "Anonymous User_v1", 'page_name': "Profile Page"},
       'v2': {'name': "Anonymous User_v2", 'page_name': "Profile Page"}},

   'api2_op': [],

   'api3_data':{'name1': "dmm", 'website1': "http://"}
}

user_api_version = input('Please choose version (v1/v2): ')
if user_api_version not in api_allowed_version:
    raise RuntimeError('Not allowed api version ({0})'.format(user_api_version))

op = dict(default_data)
for key in op.keys():
   if key.endswith('_data') and user_api_version in default_data[key].keys():
        op[key] = default_data[key][user_api_version]

这将导致:

{'Common': {'name': 'Trey', 'website': 'http://treyhunner.com'}, 
'api1_data': {'name': 'Anonymous User_v1', 'page_name': 'Profile Page'}, 
'api1_op': [], 
'api2_data': {'name': 'Anonymous User_v1', 'page_name': 'Profile Page'}, 
'api2_op': [], 
'api3_data': {'name1': 'dmm', 'website1': 'http://'}}

由于这是python,因此需要创建原始字典的深层副本(在本例中为 default_data )。 可以按照我的示例( op = dict(default_data))或通过

import copy
op = copy.deepcopy(default_data)