Как преобразовать список во вложенный dict?

#python #dictionary

#python #словарь

Вопрос:

Я пытаюсь создать вложенный dicts на основе приведенных ниже списков.

 assets = ["GOOG", "AMZN"]

variables=['LastTradePrice','Spread','QTD']

c = ['0']
  

Я попробовал приведенный ниже код, но в нем отсутствует некоторая информация, и в результате получается короткий dict, содержащий только один ресурс и одну переменную, я ожидал, что 2 ресурса будут «основными ключами», а 3 переменные — «вспомогательными ключами», за каждым «вспомогательным ключом» следует 0 в качестве значения.

Пробовал этот код:

 dct = {x: {str(y): str(z)} for x, y, z in zip(assets,variables,c)}
  

Результат, который я получил:

 {'GOOG':{'LastTradePrice':'0'}}
  

Ожидаемый результат:

 {'GOOG':{'LastTradePrice': '0','Spread':'0','QTD':'0'}, 'AMZN': {'LastTradePrice':'0','Spread':'0','QTD':'0'}}
  

Комментарии:

1. {k:{v:c[0] for v in variables} for k in assets}

Ответ №1:

Попробуйте это

 res = {x: dict(zip(variables, c * len(variables))) for x in assets}
print(res)
  

Вывод:

 {'GOOG': {'LastTradePrice': '0', 'Spread': '0', 'QTD': '0'}, 'AMZN': {'LastTradePrice': '0', 'Spread': '0', 'QTD': '0'}}

  

Комментарии:

1. Не могли бы вы объяснить, почему это было неправильно, и что вы изменили? Для целей обучения.

2. из-за zip(assets,variables,c) . просто распечатайте list(zip(assets,variables,c)) , и вы увидите. ваш код будет работать, только если все assets , variables и c имеют одинаковую длину