Python 3.x 如何动态创建字典?

Python 3.x 如何动态创建字典?,python-3.x,list,dictionary,Python 3.x,List,Dictionary,假设我有一个函数,它返回一个名为get\u miles\u sum\u by\u region()的数值。它需要几个参数(区域、层次、研究类型): 基本上,我想创建一个这样的字典: region_dict = {1: {'Detailed': {'Tier1': 123.547, 'Tier2': 69.6,...}, 'Approximate': {'Tier1': 459.0032, 'Tier2': 540.112,...} } } 我尝试过使用setdefault(),但设置不太正确:

假设我有一个函数,它返回一个名为
get\u miles\u sum\u by\u region()
的数值。它需要几个参数(区域、层次、研究类型):

基本上,我想创建一个这样的字典:

region_dict = {1: {'Detailed': {'Tier1': 123.547, 'Tier2': 69.6,...}, 'Approximate': {'Tier1': 459.0032, 'Tier2': 540.112,...} } }
我尝试过使用
setdefault()
,但设置不太正确:

region_dict = dict()
region_dict.setdefault(region, list('Detailed')).append(reg_tier1_detailed)

有没有关于正确设置的建议?

我不确定
dict.setdefault
在这种情况下如何工作,但我知道您可以使用嵌套的dict理解:

region_dict = {
    region: {
        study_type: {
            f'Tier {i}':
            get_miles_sum_by_region(region, f'TIER {i}', study_type)
            for i in range(1, 5)
            }
        for study_type in ['Detailed', 'Approximate']
        }
    for region in [1]
    }

虽然这并不完全是我所期望的,但它似乎起了作用。跟进问题;现在我基本上有了这样一个字典:
{1:{'Detailed':{'Tier 1':1732.8399404549093,'Tier 2':3383.393797910064,'Tier 3':788.8760088460933,'Tier 4':0.0},'Approximate':{'Tier 1':0.0,'Tier 2':1018.650369587715,'Tier 3':3009.34900804713,'Tier 4':0.0}
,假设我想添加更多的区域(具有相同的对象)到主词典?我正试图将其设置为一个函数,因此,一旦创建了主词典,我想循环并附加新的区域。@gwydion93有多种方法可以做到这一点,哪种方法最好取决于您的用例。例如,您可以设置
region=2
,然后使用我的代码为第一级嵌套dict分配到
region\u dict[region]
。或者为每个区域构建一个新dict,请参阅
region_dict = {
    region: {
        study_type: {
            f'Tier {i}':
            get_miles_sum_by_region(region, f'TIER {i}', study_type)
            for i in range(1, 5)
            }
        for study_type in ['Detailed', 'Approximate']
        }
    for region in [1]
    }