Есть ли более простой / питонный способ написать это? - PullRequest
0 голосов
/ 24 сентября 2018

Я хочу сделать свой код быстрее.И мне интересно, могу ли я написать эту часть кода более питоническим способом или однострочно, так что это будет немного быстрее.

Кулак Я пытаюсь удалить все пустые значения из вложенного словаря с помощью

def remove_empties_from_dict(combined_dict):
    new_dict = {}
    for k, v in combined_dict.items():
        if isinstance(v, dict):
            v = remove_empties_from_dict(v)
        if v is not None:
            new_dict[k] = v
    return new_dict or None

Если я пытаюсь использовать один слой dict((k, v) for k, v in combined_dict.iteritems() if v), он удаляет только значения в последних значениях, но не во всем наборевложенного словаря.Пример:

combined_dict = {1: {'a': {}, 'b': {}}, 2: {'c': {100: None}}, 3: {'d: {}, 'f': {1007: {'random_stirng': u'random_intiger'}

Я хочу combined_dict = {3: 'f': {1007: {'random_stirng': u'random_intiger'} с однострочником.

Второй момент - я хочу преобразовать вложенный словарь в список, чтобы я мог преобразовать его во фрейм данныхболее эффективно.Я приготовил этот код.

 new_list = []
for k1 in remove_empties_from_dict(combined_dict):
     curr_dict = remove_empties_from_dict(combined_dict)[k1]
     for k2 in curr_dict:
         curr_dict_2=curr_dict[k2]
         for k3 in curr_dict_2:
             curr_dict_3=curr_dict_2[k3]
             for k4 in curr_dict_3:
                 curr_dict_4=curr_dict_3[k4]
                 new_dict= {'c0':k1, 'c1': k2, 'c2': k3, 'c3': k4, 'c4': curr_dict_4}
                 new_list.append(new_dict)

Есть ли более питонский способ сделать это?

Спасибо за вашу помощь:)

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