簡體   English   中英

創建包含字典列表的字典列表

[英]Create a list of dictionaries containing lists of dictionaries

我在試圖圍繞我一直在研究的這個問題上彎曲我的大腦時遇到了一些麻煩。 我有一個從 SQLite 數據庫中提取的股票數據列表。 這是一個字典列表,字典看起來像這樣:

[ {symbol:'AAPL', date:'2021-04-28', close:130},
  {symbol:'AAPL', date:'2021-04-27', close:129}, 
  {symbol:'MSFT', date:'2021-04-28', close:155}, 
  {symbol:'MSFT', date:'2021-04-27', close:156}  ]  

我正在處理開盤價、最高價、最低價和收盤數據,我想編寫一個腳本來為每個數據點/時間戳分配指標值。 為了分配這些指標,我需要將這些數據操作到一個新列表中,如下所示:

Stock data = [  {'AAPL':[ {date:'2021-04-28', close:130},
                          {date:'2021-04-27', close:129} ] },
                {'MSFT':[ {date:'2021-04-28', close:155}, 
                          {date:'2021-04-27', close:156} ] } ]

我想創建一個字典列表,鍵是股票代碼,值是數據庫中包含的所有 OHLC 數據(作為字典)的列表。

在我看來,這似乎是一個包含字典列表的字典列表。

我不擔心效率,因為我只想在半夜每天運行一次。

這可以通過itertools.groupby來完成,並進行一些后續操作以刪除組密鑰。

from itertools import groupby

lst = [{'symbol': 'AAPL', 'date': '2021-04-28', 'close': 130},
       {'symbol': 'AAPL', 'date': '2021-04-27', 'close': 129},
       {'symbol': 'MSFT', 'date': '2021-04-28', 'close': 155},
       {'symbol': 'MSFT', 'date': '2021-04-27', 'close': 156}]

group_key = 'symbol'

print([{k: [{sub_k: sub_v for sub_k, sub_v in d.items() if sub_k != group_key}
            for d in v]}
       for k, v in groupby(lst, key=lambda x: x[group_key])])

Output:

[{'AAPL': [{'date': '2021-04-28', 'close': 130}, 
           {'date': '2021-04-27', 'close': 129}]}, 
 {'MSFT': [{'date': '2021-04-28', 'close': 155}, 
           {'date': '2021-04-27', 'close': 156}]}]

編輯:假設列表尚未按'symbol'排序,則需要排序階段:

from itertools import groupby

lst = [{'symbol': 'AAPL', 'date': '2021-04-28', 'close': 130},
       {'symbol': 'MSFT', 'date': '2021-04-28', 'close': 155},
       {'symbol': 'AAPL', 'date': '2021-04-27', 'close': 129},
       {'symbol': 'MSFT', 'date': '2021-04-27', 'close': 156}]

group_key = 'symbol'


def get_key(x):
    return x[group_key]


print([{k: [{sub_k: sub_v for sub_k, sub_v in d.items() if sub_k != group_key}
            for d in v]}
       for k, v in groupby(sorted(lst, key=get_key), key=get_key)])

Output:

[{'AAPL': [{'date': '2021-04-28', 'close': 130}, 
           {'date': '2021-04-27', 'close': 129}]}, 
 {'MSFT': [{'date': '2021-04-28', 'close': 155}, 
           {'date': '2021-04-27', 'close': 156}]}]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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