1

我需要此 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",
                },
            ],
        }
    ]
}

minPrice直接从这个 JSON 中获取(比如说)LTCBTC不会很漂亮:

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']

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

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

但是,由于我将一个字典列表嵌套在另一个字典中,因此我现在将复杂性推入我的转换器中。

一个干净的界面可能看起来像这样(伪代码):

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

我想这是一条人迹罕至的道路。设计这个的好方法是什么?

4

0 回答 0