Объединение многомерного словаря n-го уровня - PullRequest
0 голосов
/ 27 апреля 2018

Хорошо, так что у меня есть:

foo = {1: {'f1': 'c1'}, 2: {'f2': 'c2'}}

То, что я хочу получить, используя понимание списка (если возможно, конечно), это объединить все значения словаря 2-го уровня следующим образом:

bar = {'f1': 'c1', 'f2': 'c2'}

Я попробовал вот что:

bar = {k:v for k, v in tmp.items() for tmp in list(foo.values())}

Теперь меня это достает:

NameError: name 'tmp' is not defined

Это похоже на логическое решение, но, по-видимому, его нет, не могли бы вы предложить решение, использующее понимание списка, если это возможно, или какой-то другой вкладыш, или, если это было бы невозможно, понимание того, почему я получаю эту ошибку, будет хорошие знания, чтобы иметь.

Спасибо

1 Ответ

0 голосов
/ 27 апреля 2018

Вы можете использовать словарь понимания:

foo = {1: {'f1': 'c1'}, 2: {'f2': 'c2'}}

bar = {k: v for d in foo.values() for k, v in d.items()}

{'f1': 'c1', 'f2': 'c2'}

Вы были близки, но порядок вашего вложения неправильный. Это сложно и не всем понятно. Прочитайте ваше понимание , как если бы вы написали нормальный for цикл .

Также нет необходимости делать list из значений вашего словаря.

Связанный: Понимание понимания вложенного списка .

...