簡體   English   中英

嵌套字典中的嵌套字典,如何使它們自動化?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM