Как сделать мой код более простым с помощью Python - PullRequest
0 голосов
/ 02 апреля 2011

это мой код:

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

и указание, которое я создаю, когда первый раз так:

stage = 
{
    0:{
        'floor':{
            0:{
                'floor_point':0,
                'gift':{}
            }
        }
    }
}

но я думаю, что мой код не очень хороший, он слишком громоздкий,

так кто-нибудь знает более простой способ,

спасибо

Ответы [ 2 ]

2 голосов
/ 02 апреля 2011
data = collections.defaultdict(lambda: collections.defaultdict(
  lambda: collections.defaultdict(dict)))
data['stage'][3]['floor_point'][2] = 5
print data
1 голос
/ 02 апреля 2011

Я не уверен, чего ты хочешь достичь. Повторяющаяся тема в вашем коде:

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, [] и т. Д.), То ничего не делать.

Если это то, что вы хотели, вы можете уточнить это так:

def replace_value_by_empty_dict(d, key):
    if d.get(key):
        d[key] = {}
...
replace_value_by_empty_dict(self.data, 'stage')
etc.

Но если это не то, что вы намеревались (код сломается, если один из if s верен), вы можете сформулировать проблему английскими словами или псевдокодом, чтобы прояснить структуру проблемы.

И взгляните на collection.defaultdict .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...