在Python中转换JSON深度嵌套列表/dict结构

2024-09-29 19:19:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要此JSON中的某些值(minPricemultiplierUp):

exchange_info = requests.get('https://api.binance.com/api/v3/exchangeInfo').json()

这里有一个简化:

J = {
    "symbols": [
        {
            "symbol":"ETHBTC",
            "orderTypes":[
                "LIMIT",
                "LIMIT_MAKER",
            ],
            "filters":[
                {
                    "filterType":"PRICE_FILTER",
                    "minPrice":"0.00000100",
                },
                {
                    "filterType":"PERCENT_PRICE",
                    "multiplierUp":"5",
                },
            ],
        },
        {
            "symbol":"LTCBTC",
            "orderTypes":[
                "LIMIT",
                "LIMIT_MAKER",
            ],
            "filters":[
                {
                    "filterType":"PRICE_FILTER",
                    "minPrice":"0.00000100",
                },
                {
                    "filterType":"PERCENT_PRICE",
                    "multiplierUp":"5",
                },
            ],
        }
    ]
}

直接从这个JSON获取LTCBTCminPrice不是很好:

get_filters = lambda symbol: \
    next((s['filters'] for s in exchange_info['symbols'] \
        if s['symbol'] == symbol))

get_filter = lambda symbol, filter: \
    next((f for f in get_filters(symbol) if f['filterType'] == filter))

minPrice = lambda symbol: \
    get_filter(symbol, 'PRICE_FILTER')['minPrice']

这段代码效率低下,我必须为包含此嵌套模式的每个数据结构编写类似的代码

一次性转换会更干净。将任何包含的dict列表转换为dict的东西

然而,由于我有一个目录列表嵌套在另一个目录列表中,我现在将复杂性推到我的转换器中

干净的接口可能看起来像这样(伪代码):

minPrice = process(J)  \
    .symbols(symbol='ETHBTC')  \
    .filters(filterType='PRICE_FILTER')  \
    .minPrice

我想这是一条走得很好的路。设计这个的好方法是什么


Tags: lambda代码json列表getfiltersymbolprice

热门问题