#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
имеют одинаковую длину