Python, парсинг значения с использованием переменной в регулярном выражении

Язык Python, помогите пожалуйста с парсингом значения из строки.

Имеется переменная с типом данных <class 'list'>, с таким значением:

tickers = [{'symbol': 'BTCUSDT', 'price': '21337.84000000'}, {'symbol': 'XRPUSDT', 'price': '0.00244900'}, {'symbol': 'ETHUSDT', 'price': '52.40000000'}]

На самом деле в строке намного больше валютных пар и цен, я укоротил строку. Значение переменной tickers обновляется раз в секунду и значения валютных пар могут меняться местами, это сайт их так может отдавать, в итоге значение переменной tickers может выглядеть так:

[{'symbol': 'XRPUSDT', 'price': '0.00244900'}, {'symbol': 'ETHUSDT', 'price': '52.40000000'}, {'symbol': 'BTCUSDT', 'price': '21337.84000000'}]

или например так:

[{'symbol': 'ETHUSDT', 'price': '52.40000000'}, {'symbol': 'BTCUSDT', 'price': '21337.84000000'}, {'symbol': 'XRPUSDT', 'price': '0.00244900'}]

Есть задача получить значение цены для определенной валютной пары, записанной в переменной

para= "BTCUSDT"

Переменная со списком para используется в цикле for, значения переменной меняются

Как проще, регуляркой или json или еще как то, получить значение 21337.84000000 для пары BTCUSDT подставляя значение с валютной парой из переменной para


Ответы (3 шт):

Автор решения: Namerek

pip install jmespath

import jmespath as jp

data = [{'symbol': 'ETHUSDT', 'price': '52.40000000'},
        {'symbol': 'BTCUSDT', 'price': '21337.84000000'},
        {'symbol': 'XRPUSDT', 'price': '0.00244900'}]
para = "BTCUSDT"
pricepara = float(
    jp.search(
        f"[?symbol=='{para}'].price | [0]",
        data
    ) or 'NaN'
)

print(pricepara)

# 21337.84
→ Ссылка
Автор решения: Dimych

т.е. основная проблема как в ваш код вместо "[?symbol=='BTCUSDT'].price | [0]", Подставить вместо BTCUSDT значение из переменной, примерно так:

мне нужно немного по другому, но почему то не работает

data = [{'symbol': 'ETHUSDT', 'price': '52.40000000'}, {'symbol': 'BTCUSDT', 'price': '21337.84000000'},
        {'symbol': 'XRPUSDT', 'price': '0.00244900'}]
        
para = "BTCUSDT"

pricepara = float(
    jp.search(
        "[?symbol=='para'].price | [0]",
        data
    ) or 'NaN'
)

print(pricepara)
→ Ссылка
Автор решения: SergFSM

помогите пожалуйста с парсингом значения из строки

Имеется переменная с типом данных <class 'list'>

так у вас строка или список?

если это список словарей (как в примере) то можно еще вынуть нужное значение через вспомогательный словарь:

para = "BTCUSDT"
data = [{'symbol': 'ETHUSDT', 'price': '52.40000000'},
        {'symbol': 'BTCUSDT', 'price': '21337.84000000'},
        {'symbol': 'XRPUSDT', 'price': '0.00244900'}]

pares = {i['symbol']:float(i['price']) for i in data}
print(pares.get(para))  # 21337.84
→ Ссылка