Я хочу сделать свой код быстрее.И мне интересно, могу ли я написать эту часть кода более питоническим способом или однострочно, так что это будет немного быстрее.
Кулак Я пытаюсь удалить все пустые значения из вложенного словаря с помощью
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)
Есть ли более питонский способ сделать это?
Спасибо за вашу помощь:)