Подтвердить что ты не робот

Вложенное понимание словаря python

У меня возникли проблемы с пониманием вложенных понятий словаря в Python 3. Результат, который я получаю из приведенного ниже примера, выводит правильную структуру без ошибок, но включает только одну из внутренних пар ключ: значение. Я не нашел пример вложенного понимания слова как это; Googling "вложенное понимание словаря python" показывает устаревшие примеры, не вложенные решения или ответы, разрешенные с использованием другого подхода. Возможно, я использую неправильный синтаксис.

Пример:

data = {outer_k: {inner_k: myfunc(inner_v)} for outer_k, outer_v in outer_dict.items() for inner_k, inner_v in outer_v.items()}

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

Структура словаря external_dict, а также результат:

{outer_k: {inner_k: inner_v, ...}, ...}
4b9b3361

Ответ 1

{inner_k: myfunc(inner_v)} не является пониманием словаря. Это просто словарь.

Вероятно, вы ищете что-то вроде этого:

data = {outer_k: {inner_k: myfunc(inner_v) for inner_k, inner_v in outer_v.items()} for outer_k, outer_v in outer_dict.items()}

Для удобства чтения не слишком усложняйте понимание слова и понимание списков.

Ответ 2

Добавление некоторых разрывов строк и отступов:

data = {
    outer_k: {inner_k: myfunc(inner_v)} 
    for outer_k, outer_v in outer_dict.items()
    for inner_k, inner_v in outer_v.items()
}

... делает очевидным, что на самом деле у вас есть одно "двумерное" понимание. Вероятно, вы действительно хотите:

data = {
    outer_k: {
        inner_k: myfunc(inner_v)
        for inner_k, inner_v in outer_v.items()
    } 
    for outer_k, outer_v in outer_dict.items()
}

(это именно то, что Блендер предложил в своем ответе с добавленными пробелами).