字典在Python 3中的字典

Den*_*yts 4 python dictionary

我正在寻找一个函数addproperty(property_str, property_dict, old_dict = None),我需要一个字符串,一个字典和一个可选字典作为参数.该函数需要返回一个新的字典,其中相应的值被添加到可选字典中.

例如.如果我输入:

capitals_dict = {'USA': 'Washington', 'Russia': 'Moscow', 'Japan': 'Tokyo'}
Run Code Online (Sandbox Code Playgroud)

该函数addproperty('capital', capitals_dict)需要返回以下字典

{'USA': {'capital': 'Washington'}, 'Russia': {'capital': 'Moscow'}, 'Japan': {'capital': 'Tokyo'}}
Run Code Online (Sandbox Code Playgroud)

当我在可选参数中输入该字典时,我还需要能够扩展这样的字典以向这些国家添加新的细节.

例如:

old_dict = {'USA': {'capital': 'Washington'}, 'Russia': {'capital': 'Moscow'}, 'Japan': 'capital': 'Tokyo'}}
demonym_dict = {'USA': 'American', 'Russia': 'Russian', 'Japan': 'Japanese'}
Run Code Online (Sandbox Code Playgroud)

然后addproperty('demonym', demonym_dict, old_dict)需要返回:

{'USA': {'capital': 'Washington', 'demonym': 'American'}, 'Russia': {'capital': 'Moscow', 'demonym': 'Russian'}, 'Japan': {'capital': 'Tokyo', 'demonym': 'Japanese'}}
Run Code Online (Sandbox Code Playgroud)

我该怎么开始呢?

And*_*ark 5

def addproperty(property_str, property_dict, old_dict=None):
    result = old_dict if old_dict is not None else {}
    for k, v in property_dict.items():
        result.setdefault(k, {})[property_str] = v
    return result
Run Code Online (Sandbox Code Playgroud)

例如:

>>> capitals_dict = {'USA': 'Washington', 'Russia': 'Moscow', 'Japan': 'Tokyo'}
>>> result = addproperty('capital', capitals_dict)
>>> result
{'Japan': {'capital': 'Tokyo'}, 'Russia': {'capital': 'Moscow'}, 'USA': {'capital': 'Washington'}}
>>> demonym_dict = {'USA': 'American', 'Russia': 'Russian', 'Japan': 'Japanese'}
>>> addproperty('demonym', demonym_dict, result)
{'Japan': {'demonym': 'Japanese', 'capital': 'Tokyo'}, 'Russia': {'demonym': 'Russian', 'capital': 'Moscow'}, 'USA': {'demonym': 'American', 'capital': 'Washington'}}
Run Code Online (Sandbox Code Playgroud)

请注意,old_dict如果提供此选项,则会进行修改.如果这是一个问题,请导入复制模块并使用以下内容替换函数中的第一行:

result = copy.deepcopy(old_dict) if old_dict is not None else {}
Run Code Online (Sandbox Code Playgroud)