[英]Nested dicts inside nested dicts, how to automate them?
我正在嘗試在另一個嵌套字典中生成一個嵌套字典,但我只能完成一個步驟。
這是我得到的代碼:
variables = ['CHG', 'Open', 'Close']
assets= ['GOOG', 'FB']
dates =['28-09-2020', '25-09-2020']
dct = {x: dict(zip(assets, '0' * len(assets))) for x in dates}
讓我:
{'28-09-2020': {'GOOG': '0', 'FB': '0'}, '25-09-2020': {'GOOG': '0', 'FB': '0'}}
我如何生成字典,每個資產中都有變量?
我的目標是獲得這樣的命令:
{'28-09-2020': {'GOOG': {'CHG':0, 'Open':0, 'Close':0}, 'FB': {'CHG':0, 'Open':0, 'Close':0}}, '25-09-2020': {'GOOG': {'CHG':0, 'Open':0, 'Close':0}, 'FB': {'CHG':0, 'Open':0, 'Close':0}}}
{date: {x: dict(zip(variables, '0' * len(variables))) for x in assets} for date in dates}
輸出
{'28-09-2020': {'GOOG': {'CHG': '0', 'Open': '0', 'Close': '0'},
'FB': {'CHG': '0', 'Open': '0', 'Close': '0'}},
'25-09-2020': {'GOOG': {'CHG': '0', 'Open': '0', 'Close': '0'},
'FB': {'CHG': '0', 'Open': '0', 'Close': '0'}}}
讓我們從內到外解決這個問題。
>>> from itertools import repeat
>>> dict.fromkeys(variables, 0)
{'CHG': 0, 'Open': 0, 'Close': 0}
>>> dict(zip(assets, repeat(_)))
{'GOOG': {'CHG': 0, 'Open': 0, 'Close': 0}, 'FB': {'CHG': 0, 'Open': 0, 'Close': 0}}
>>> dict(zip(dates, repeat(_)))
{'28-09-2020': {'GOOG': {'CHG': 0, 'Open': 0, 'Close': 0}, 'FB': {'CHG': 0, 'Open': 0, 'Close': 0}}, '25-09-2020': {'GOOG': {'CHG': 0, 'Open': 0, 'Close': 0}, 'FB': {'CHG': 0, 'Open': 0, 'Close': 0}}}
所以你可以使用
dct = dict(zip(dates, repeat(dict(zip(assets, repeat(dict.fromkeys(variables, 0)))))))
或以字典理解形式
dct = {d: {a: dict.fromkeys(variables, 0) for a in assets} for d in dates}
{d: {a: {v:0 for v in variables} for a in assets} for d in dates}
輸出
{'28-09-2020': {'GOOG': {'CHG': 0, 'Open': 0, 'Close': 0}, 'FB': {'CHG': 0, 'Open': 0, 'Close': 0}},
'25-09-2020': {'GOOG': {'CHG': 0, 'Open': 0, 'Close': 0}, 'FB': {'CHG': 0, 'Open': 0, 'Close': 0}}}
您可以使用NestedDict
。 首先安裝ndicts
pip install ndicts
然后
from ndicts.ndicts import NestedDict
variables = ['CHG', 'Open', 'Close']
assets= ['GOOG', 'FB']
dates =['28-09-2020', '25-09-2020']
nd = NestedDict.from_product(dates, assets, variables, value=0)
如果您需要將結果作為字典
>>> nd.to_dict()
{'28-09-2020': {
'GOOG': {'CHG': 0, 'Open': 0, 'Close': 0},
'FB': {'CHG': 0, 'Open': 0, 'Close': 0}},
'25-09-2020': {
'GOOG': {'CHG': 0, 'Open': 0, 'Close': 0},
'FB': {'CHG': 0, 'Open': 0, 'Close': 0}}}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.