首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建包含词典列表的词典列表

创建包含词典列表的词典列表
EN

Stack Overflow用户
提问于 2021-05-02 07:37:58
回答 1查看 65关注 0票数 0

在这个我一直致力于的问题上,我遇到了一些困难。我有一个从SQLite数据库中提取的股票数据列表。这是一个字典列表,字典看起来像这样:

代码语言:javascript
复制
[ {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}  ]  

我正在处理开盘、高位、低位和收盘数据,我想编写一个脚本来为每个数据点/时间戳分配指标值。为了分配这些指标,我需要将这些数据操作到一个新的列表中,如下所示:

代码语言:javascript
复制
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数据(作为字典)的列表。

在我看来,这是一个包含字典列表的字典列表。

我不担心效率,因为我只想在半夜每天运行一次。

EN

回答 1

Stack Overflow用户

发布于 2021-05-02 07:57:51

这可以使用itertools.groupby来完成,并通过一些后续操作来删除组密钥。

代码语言:javascript
复制
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])])

输出:

代码语言:javascript
复制
[{'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'排序,排序阶段是必需的:

代码语言:javascript
复制
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)])

输出:

代码语言:javascript
复制
[{'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}]}]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67351761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档