如何使用python使我的代码更简单

时间:2011-04-02 10:35:44

标签: python dictionary

这是我的代码:

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':{}
            }
        }
    }
}

但我觉得我的代码不是很好,太麻烦了,

所以有人知道更简单的方法,

感谢

2 个答案:

答案 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有一个键keysome_dict[key]是一个真值,那么将some_dict[key]替换为{}。如果some_dict没有密钥keysome_dict[key]是假值(None0False,{{1}等等),然后什么都不做。

如果这就是你想要的,你可以这样澄清:

[]

但如果那不是你想要的(如果其中一个def replace_value_by_empty_dict(d, key): if d.get(key): d[key] = {} ... replace_value_by_empty_dict(self.data, 'stage') etc. 是真的,代码会中断),你可能想用英语单词或伪代码来表达问题来澄清问题的结构。

看看collections.defaultdict