我需要此 JSON 中的某些值(minPrice
和multiplierUp
):
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
我想这是一条人迹罕至的道路。设计这个的好方法是什么?