这是我的代码:
def set_floor_point(self,floor_point=None):
if self.data.get('stage'):
self.data['stage'] = {}
stage_number = self.get_stage_number()
floor_number = self.get_floor_number()
if self.data['stage'].get(stage_number):
self.data['stage'][stage_number] = {}
if self.data['stage'][stage_number].get('floor_point'):
self.data['stage'][stage_number]['floor_point'] = {}
if self.data['stage'][stage_number]['floor_point'].get(floor_number):
self.data['stage'][stage_number]['floor_point'][floor_number] = {}
self.data['stage'][stage_number]['floor_point'][floor_number] = floor_point
我第一次创建的dict是这样的:
stage =
{
0:{
'floor':{
0:{
'floor_point':0,
'gift':{}
}
}
}
}
但我觉得我的代码不是很好,太麻烦了,
所以有人知道更简单的方法,
感谢
答案 0 :(得分:2)
data = collections.defaultdict(lambda: collections.defaultdict(
lambda: collections.defaultdict(dict)))
data['stage'][3]['floor_point'][2] = 5
print data
答案 1 :(得分:1)
我不确定你想要达到什么目标。代码中反复出现的主题是:
if some_dict.get(key):
some_dict[key] = {}
这意味着:如果some_dict
有一个键key
且some_dict[key]
是一个真值,那么将some_dict[key]
替换为{}
。如果some_dict
没有密钥key
或some_dict[key]
是假值(None
,0
,False
,{{1}等等),然后什么都不做。
如果这就是你想要的,你可以这样澄清:
[]
但如果那不是你想要的(如果其中一个def replace_value_by_empty_dict(d, key):
if d.get(key):
d[key] = {}
...
replace_value_by_empty_dict(self.data, 'stage')
etc.
是真的,代码会中断),你可能想用英语单词或伪代码来表达问题来澄清问题的结构。