#python #dictionary #consolidation
#python #словарь #консолидация
Вопрос:
У меня ниже сложная структура со словарями с несколькими повторяющимися ключами. Я хочу консолидировать приведенную ниже структуру и вернуть приведенную ниже структуру. Пробовал несколько способов, но не смог его взломать. Пожалуйста, помогите.
Структура ввода:
{'lst_1': [{"127.0.0.1": [{“key1”:{“asm”: “entry1”, “CHG”: [“entry2”]}}]}, {"127.0.0.1": [{“key1”: {“PL”: “entry3”, “DU”: “entry4”}}]}, {"127.0.0.1": [{“key1”: {“SL”: “entry5”, “DU”: “entry6”}}]}], 'lst_0': [{"127.0.0.1": [{“key2”: {“asm”: “entry7”, “CHG”: [“entry8”]}}]}, {"127.0.0.1": [{“key2: {“PL”: “entry9”, “DU”: “entry10”}}]}, {"127.0.0.1": [{“key2”: {“SL”: “entry11”, “DU”: “entry12”}}]}]}
Структура вывода:
{‘key1’: {‘asm’: ‘entry1’, 'SL': ‘entry5’, 'CHG’: [‘entry2’], 'DU': ‘entry6’, 'PL': ‘entry3’}, ‘key2’: {‘asm’: ‘entry7’, 'SL': ‘entry11’, 'CHG’: [‘entry8’], 'DU': ‘entry12’, 'PL': ‘entry9’}}
Ответ №1:
Этот выполняет свою работу.
def filterDict(complex_dict):
filtered_dict = {}
for a in complex_dict.values():
for b in a:
for c in b.values():
for d in c:
for e, f in d.items():
if e not in filtered_dict:
filtered_dict[e] = {}
filtered_dict[e].update(f)
return filtered_dict
complex_dict = {'lst_0': [{'127.0.0.1': [{'key2': {'CHG': ['entry8'],
'asm': 'entry7'}}]},
{'127.0.0.1': [{'key2': {'DU': 'entry10',
'PL': 'entry9'}}]},
{'127.0.0.1': [{'key2': {'DU': 'entry12',
'SL': 'entry11'}}]}],
'lst_1': [{'127.0.0.1': [{'key1': {'CHG': ['entry2'],
'asm': 'entry1'}}]},
{'127.0.0.1': [{'key1': {'DU': 'entry4',
'PL': 'entry3'}}]},
{'127.0.0.1': [{'key1': {'DU': 'entry6',
'SL': 'entry5'}}]}]}
print(filteredDict(complex_dict))
## OUTPUT:
# {'key1': {'CHG': ['entry2'],
# 'DU': 'entry6',
# 'PL': 'entry3',
# 'SL': 'entry5',
# 'asm': 'entry1'},
# 'key2': {'CHG': ['entry8'],
# 'DU': 'entry12',
# 'PL': 'entry9',
# 'SL': 'entry11',
# 'asm': 'entry7'}}
Я думаю, здесь нечего объяснять, поскольку это всего лишь набор вложенных циклов для получения значений, необходимых для отфильтрованного словаря.
Мне очень любопытно, почему у вас такая структура для вашего словаря. Если вы можете и способны, я предлагаю реструктурировать ваш словарь, чтобы вам не приходилось иметь дело с такого рода вложенными циклами.
Комментарии:
1. спасибо за решение. Я понимаю, что это сложная структура для словаря, но это из восходящего потока, который я должен был обработать со своей стороны.