python - 根据字典值追加列表嵌套字典
问题描述
在这里编辑...我从以下 current_tick = json.loads(response)获得如下实时数据
{'symbol': 'TSLA', 'minute': '2020/06/02 17:31', 'open': '882.4', 'high': '882.4', 'low': '882.93', 'close': '885.93'},
{'symbol': 'SPY', 'minute': '2020/06/02 17:33', 'open': '307.96', 'high': '307.99', 'low': '307.96', 'close': '307.99'},
{'symbol': 'TSLA', 'minute': '2020/06/02 17:32', 'open': '882.0', 'high': '882.0', 'low': '307.94', 'close': '307.94'},
{'symbol': 'SPY', 'minute': '2020/06/02 17:34', 'open': '307.94', 'high': '307.97', 'low': '307.94', 'close': '307.96'},
{'symbol': 'SPY', 'minute': '2020/06/02 17:35', 'open': '307.96', 'high': '307.98', 'low': '307.96', 'close': '307.98'},
{'symbol': 'SPY', 'minute': '2020/06/02 17:36', 'open': '308.02', 'high': '308.04', 'low': '308.02', 'close': '308.04'}
我在变量 current_tick 中插入了如下内容:
在这里编辑...
{'symbol': 'TSLA', 'minute': '2020/06/02 17:31', 'open': '882.4', 'high': '882.4', 'low': '882.93', 'close': '885.93'}
{'symbol': 'SPY', 'minute': '2020/06/02 17:33', 'open': '307.96', 'high': '307.99', 'low': '307.96', 'close': '307.99'}
{'symbol': 'TSLA', 'minute': '2020/06/02 17:32', 'open': '882.0', 'high': '882.0', 'low': '307.94', 'close': '307.94'}
{'symbol': 'SPY', 'minute': '2020/06/02 17:34', 'open': '307.94', 'high': '307.97', 'low': '307.94', 'close': '307.96'}
{'symbol': 'SPY', 'minute': '2020/06/02 17:35', 'open': '307.96', 'high': '307.98', 'low': '307.96', 'close': '307.98'}
{'symbol': 'SPY', 'minute': '2020/06/02 17:36', 'open': '308.02', 'high': '308.04', 'low': '308.02', 'close': '308.04'}
如果股票代码为 1 并从变量 current_tick 获取数据,我已经实现了可以正常工作的代码,但是如果它是多个股票代码,那么它会覆盖现有的股票代码并导致其他问题。
if not tick_dt in minutes_processed:
minutes_processed[tick_dt] = True
print(minutes_processed)
if len(minute_candlesticks) > 0:
minute_candlesticks[-1]["close"] = previous_tick["last"]
minute_candlesticks.append(
{
"symbol": current_tick["symbol"],
"minute": tick_dt,
"open": current_tick["last"],
"high": current_tick["last"],
"low": current_tick["last"],
}
)
if len(minute_candlesticks) > 0:
current_candlestick = minute_candlesticks[-1]
if current_tick["last"] > current_candlestick["high"]:
current_candlestick["high"] = current_tick["last"]
if current_tick["last"] < current_candlestick["low"]:
current_candlestick["low"] = current_tick["last"]
现在我正在尝试在字典上创建字典列表并插入股票符号实时数据以映射它们的特定符号,如下所示。
app_stock_list = [
{'TSLA': {'symbol': 'TSLA', 'minute': '2020/06/02 17:31', 'open': '882.4', 'high': '882.4', 'low': '882.93', 'close': '885.93'},
{'symbol': 'TSLA', 'minute': '2020/06/02 17:32', 'open': '882.0', 'high': '882.0', 'low': '307.94', 'close': '307.94'}},
{'SPY': {'symbol': 'SPY', 'minute': '2020/06/02 17:33', 'open': '307.96', 'high': '307.99', 'low': '307.96', 'close': '307.99'},
{'symbol': 'SPY', 'minute': '2020/06/02 17:34', 'open': '307.94', 'high': '307.97', 'low': '307.94', 'close': '307.96'},
{'symbol': 'SPY', 'minute': '2020/06/02 17:35', 'open': '307.96', 'high': '307.98', 'low': '307.96', 'close': '307.98'},
{'symbol': 'SPY', 'minute': '2020/06/02 17:36', 'open': '308.02', 'high': '308.04', 'low': '308.02', 'close': '308.04'}
]
如何更正上述代码以创建上述字典,或者编写代码为每个符号附加实时数据的正确方法是什么?
注意:我编辑了一点以有正确的理解。
解决方案
我认为这种 dict 理解对你有用:
stock_list = [
{'symbol': 'TSLA', 'minute': '2020/06/02 17:31', 'open': '882.4', 'high': '882.4', 'low': '882.93', 'close': '885.93'},
{'symbol': 'SPY', 'minute': '2020/06/02 17:33', 'open': '307.96', 'high': '307.99', 'low': '307.96', 'close': '307.99'},
{'symbol': 'TSLA', 'minute': '2020/06/02 17:32', 'open': '882.0', 'high': '882.0', 'low': '307.94', 'close': '307.94'},
{'symbol': 'SPY', 'minute': '2020/06/02 17:34', 'open': '307.94', 'high': '307.97', 'low': '307.94', 'close': '307.96'},
{'symbol': 'SPY', 'minute': '2020/06/02 17:35', 'open': '307.96', 'high': '307.98', 'low': '307.96', 'close': '307.98'},
{'symbol': 'SPY', 'minute': '2020/06/02 17:36', 'open': '308.02', 'high': '308.04', 'low': '308.02', 'close': '308.04'}
]
stocks = {symbol: [i for i in stock_list if i['symbol'] == symbol]
for symbol in {i['symbol'] for i in stock_list}} # use a set() comprehension to get the unique items
# how to update with a price dict
updated_price = {'symbol': 'TSLA', 'minute': '2020/06/02 17:33', 'open': '123.0', 'high': '456.0', 'low': '789.94', 'close': '032.94'}
stocks[updated_price['symbol']].append(updated_price)
import json
print(json.dumps(stocks, indent=4))
输出(json 化):
{
"TSLA": [
{
"symbol": "TSLA",
"minute": "2020/06/02 17:31",
"open": "882.4",
"high": "882.4",
"low": "882.93",
"close": "885.93"
},
{
"symbol": "TSLA",
"minute": "2020/06/02 17:32",
"open": "882.0",
"high": "882.0",
"low": "307.94",
"close": "307.94"
},
{
"symbol": "TSLA",
"minute": "2020/06/02 17:33",
"open": "123.0",
"high": "456.0",
"low": "789.94",
"close": "032.94"
}
],
"SPY": [
{
"symbol": "SPY",
"minute": "2020/06/02 17:33",
"open": "307.96",
"high": "307.99",
"low": "307.96",
"close": "307.99"
},
{
"symbol": "SPY",
"minute": "2020/06/02 17:34",
"open": "307.94",
"high": "307.97",
"low": "307.94",
"close": "307.96"
},
{
"symbol": "SPY",
"minute": "2020/06/02 17:35",
"open": "307.96",
"high": "307.98",
"low": "307.96",
"close": "307.98"
},
{
"symbol": "SPY",
"minute": "2020/06/02 17:36",
"open": "308.02",
"high": "308.04",
"low": "308.02",
"close": "308.04"
}
]
}
推荐阅读
- java - Spring Boot Security & Vaadin 页面导航&渲染问题
- python-3.x - 如果字符串出现在数据框中,则增加一列
- c# - 创建没有外键的导航属性
- sql - SQL Server 不会将触发器事务回滚到保存点
- vue.js - 在 Vue-CLI 项目中,Babel 没有为 IE11 转换块供应商
- ios - 使用 Siesta 框架存储凭据 - iOS
- synchronization - 障碍似乎只在一个时间窗口内同步
- flutter - 颤振:没有可用的设备
- objective-c - -[NSString longLongValue] 在 0x 之后忽略我的字符串
- java - 获取器和设置器无法正常工作?