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