Как получить значение из списка словарей - Python 3.7.1

У меня проблема со списком словарей. Мне нужно получить цену Биткойна из следующего списка (список длиннее, но я сократил его для этого сообщения):

tickerlist = [{'symbol': 'ETHBTC', 'price': '0.03756600'},
            {'symbol': 'LTCBTC', 'price': '0.00968200'},
            {'symbol': 'BNBBTC', 'price': '0.00164680'},
            {'symbol': 'NEOBTC', 'price': '0.00230000'},
            {'symbol': 'QTUMETH', 'price': '0.01587100'},
            {'symbol': 'EOSETH', 'price': '0.01875000'},
            {'symbol': 'SNTETH', 'price': '0.00013221'},
            {'symbol': 'BNTETH', 'price': '0.00445000'},
            {'symbol': 'BCCBTC', 'price': '0.07908100'},
            {'symbol': 'GASBTC', 'price': '0.00064300'},
            {'symbol': 'BNBETH', 'price': '0.04389800'},
            {'symbol': 'BTCUSDT', 'price': '3954.63000000'}]

Цель состоит в том, чтобы получить следующий результат:

BTCUSDT = 3954,63000000

Я написал следующий код noob, чтобы достичь своей цели:

x = tickerlist[11]
BTCUSDT = x["price"]
print(BTCUSDT)

Поскольку порядок в списке (позиция 11) интересующего меня словаря: {'symbol': 'BTCUSDT', 'price': '3954.63000000'} может измениться в будущем, я хотел знать, есть ли функция, где я просто вставляю "BTCUSDT", и это возвращает мне цену ("3954.63000000").

Я посмотрел на stackru и нашел исчерпывающий список, но мне не удалось заставить его работать.

Есть ли у вас какие-либо идеи?

Я использую Python 3.7.1

3 ответа

Решение

Вы можете использовать next функция с генератором выражения, которое перебирает tickerlist найти соответствующий символ:

try:
    BTCUSDT = next(ticker['price'] for ticker in tickerlist if ticker['symbol'] == 'BTCUSDT')
except StopIteration:
    raise RuntimeError('No matching symbol found')

Ты можешь использовать dict вместо list:

ticker_dict =  {
    'ETHBTC': {'price': '0.03756600'},
    'LTCBTC', {'price': '0.00968200'}
}

Либо сделать что-то вроде этого:

my_currency = list(filter(lambda list_element: list_element['symbol'] == your_symbol, tickerlist))[0]

Попробуйте следующее:

index = [ i for i in range(len(lst)) if lst[i]['symbol'] == 'BTCUSDT' ][0]

print( tickerlist[index]['symbol'], '=', tickerlist[index]['price'] )       
Другие вопросы по тегам