Обмен ключами вложенных словарей

1

У меня есть словарь следующим образом:

У каждого ключа есть словарь, связанный с ним.

dict_sample = {'a': {'d0': '1', 'd1': '2', 'd2': '3'}, 'b': {'d0': '1'}, 'c': {'d1': '1'}}

Мне нужен вывод следующим образом:

output_dict = {'d0': {'a': 1, 'b': 1}, 'd1': {'a': 2, 'c': 1}, 'd2': {'a': 3}}

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

Теги:
python-3.x
dictionary

2 ответа

1
Лучший ответ

Вы можете использовать dict.setdefault для нового dict с вложенным циклом:

d = {}
# for each key and sub-dict in the main dict
for k1, s in dict_sample.items():
    # for each key and value in the sub-dict
    for k2, v in s.items():
        # this is equivalent to d[k2][k1] = int(v), except that when k2 is not yet in d,
        # setdefault will initialize d[k2] with {} (a new dict)
        d.setdefault(k2, {})[k1] = int(v)

d станет:

{'d0': {'a': 1, 'b': 1}, 'd1': {'a': 2, 'c': 1}, 'd2': {'a': 3}}
  • 0
    Благодарю вас ! Не могли бы вы кратко объяснить код. Я новичок в Python.
  • 0
    Пожалуйста. Я обновил свой код с помощью встроенных комментариев, которые должны помочь объяснить это.
1

Я считаю, что это дает желаемый результат

>>> from collections import defaultdict
>>> d = defaultdict(dict)
>>>
>>> dict_sample = {'a': {'d0': '1', 'd1': '2', 'd2': '3'}, 'b': {'d0': '1'}, 'c': {'d1': '1'}}
>>>
>>> for key, value in dict_sample.items():
...     for k, v in value.items():
...         d[k][key] = v
...
>>> d
defaultdict(<class 'dict'>, {'d0': {'a': '1', 'b': '1'}, 'd1': {'a': '2', 'c': '1'}, 'd2': {'a': '3'}})
  • 0
    Благодарю вас !. Что такое defaultdict? Как это помогает, в отличие от простой инициализации d = {}. Я не слежу за этим. Пожалуйста, объясните.
  • 0
    @ChandanSingh docs.python.org/3/library/…

Ещё вопросы

Сообщество Overcoder
Наверх
Меню