首页 > 解决方案 > 根据字典值追加列表嵌套字典

问题描述

在这里编辑...我从以下 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'}
]

如何更正上述代码以创建上述字典,或者编写代码为每个符号附加实时数据的正确方法是什么?

注意:我编辑了一点以有正确的理解。

标签: pythonlistdictionary

解决方案


我认为这种 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"
        }
    ]
}

推荐阅读