Преобразование плохо сформированного словаря с pandas - PullRequest
1 голос
/ 02 февраля 2020

У меня плохо отформатированный словарь, в котором в качестве ключей во вложенном словаре используются числа, и не все ключи верхнего уровня имеют одинаковое количество вложенных элементов. Пример:

 {'Option 1': {'0': 'es_LA', '1': 'de_DE', '2': 'fr_FR'}, 'Option 2': {'0': 'de_DE', '1': 'it_IT', '2': 'ja_JP'}}

Желаемый результат - что-то вроде

 {'category': 'Option 1', 'locales': ['es_LA', 'de_DE', 'fr_FR']}, {'category': 'Option 2', 'locales': ['de_DE', 'it_IT', 'ja_JP']}

Я знаю, что это повлечет за собой итерации, но мне трудно понять, как добраться до этой точки, так как ключи не все одинаковые. Любая помощь будет оценена.

1 Ответ

1 голос
/ 03 февраля 2020

Вы можете просто использовать список-понимание - следующим образом. Мы используем d.items() для перебора каждой пары ключ-значение в исходном словаре. Для каждого ключа, пары значений мы хотим создать новый словарь, состоящий из category сопоставления с ключом и locales сопоставления каждому значению из старого значения словаря. Написано полностью, это эквивалентно:

Код:

>>> d = {'Option 1': {'0': 'es_LA', '1': 'de_DE', '2': 'fr_FR'}, 'Option 2': {'0': 'de_DE', '1': 'it_IT', '2': 'ja_JP'}}
>>> d_new = [{'category': k, 'locales': list(v.values())} for k, v in d.items()]
>>> d_new
[{'category': 'Option 1', 'locales': ['es_LA', 'de_DE', 'fr_FR']},
 {'category': 'Option 2', 'locales': ['de_DE', 'it_IT', 'ja_JP']}]
...