Как сохранить несколько значений из списка в словаре

#python #dictionary

Вопрос:

У меня есть список словарей, но я хочу сохранить 3 значения из словаря с именем «цена»

Мой код таков

 response = yf.Ticker("FB").stats()["price"]
 

выход:

 {'averageDailyVolume10Day': 19621971,
 'averageDailyVolume3Month': 16023089,
 'circulatingSupply': None,
 'currency': 'USD',
 'currencySymbol': '

Я хотел бы получить только краткое имя, обычную рыночную цену и символ

Я знаю, что если я хочу извлечь одно значение, я должен запустить

 response = yf.Ticker("FB").stats()["price"]["shortName"]
 

но есть ли способ сохранить все 3 значения в ответе?

Комментарии:

1. response = [yf.Ticker("FB").stats()["price"]["shortName'], yf.Ticker("FB").stats()["price"]["regularMarketPrice'], yf.Ticker("FB").stats()["price"]["symbol']] ?

2. Спасибо Ардж Адриансену, это работает, но есть ли способ сделать это, не вызывая статистику() несколько раз?

3. Сначала сохраните yf.Ticker("FB").stats()["price"] как переменную

4. Дело в том, что у меня уже есть это, как описано выше, но я пытаюсь найти самый быстрый способ извлечения данных, так как этот код написан как функция, которая работает циклически, чтобы получить данные о многих запасах, поэтому это может занять некоторое время. Как ты думаешь, это самый быстрый способ?

Ответ №1:

Предполагая output , что словарь, который вы показываете, хранится в response переменной, вы можете попробовать это -

 keys = ['shortName', 'regularMarketPrice', 'symbol']
filtered_response = {k:response.get(k) for k in keys}
 
 {'shortName': 'Facebook, Inc.', 
 'regularMarketPrice': 340.765, 
 'symbol': 'FB'}
 

Ответ №2:

@RJ правильно выразился в комментариях, но вот вам некоторое объяснение:

В этом случае, yf.Ticker("FB").stats()["price"]["shortName"] возвращается вам весь словарь. Таким образом, все значения возвращаются и сохраняются в response .

Так что вы можете просто сделать:

 response = yf.Ticker("FB").stats()["price"]
shortName = response["shortName"]
regularMarketPrice = response["regularMarketPrice"]
symbol = response["symbol"]

 

Комментарии:

1. Дело в том, что у меня уже есть это, как описано выше, но я пытаюсь найти самый быстрый способ извлечения данных, так как этот код написан как функция, которая работает циклически, чтобы получить данные о многих запасах, поэтому это может занять некоторое время. Как ты думаешь, это самый быстрый способ?

2. Если вы посмотрите справку по библиотеке, там объясняется, что вы можете извлекать несколько символов одновременно.

3. Вам следует обновить / заменить свой вопрос вопросом "Как мне быстрее получать данные из Yahoo Finance?" или аналогичным. Мы отвечаем на заданный вами вопрос, который просто касается получения значений из словаря.

Ответ №3:

 d = {...}

market_price, name, symbol = [d.get(k) for k in d if k == "regularMarketPrice" or k == "shortName" or k == "symbol"]

print(f'MarketPrice: {market_price}')
print(f'shortName  : {name}')
print(f'symbol     : {symbol}')
 

,
'exchange': 'NMS',
'exchangeDataDelayedBy': 0,
'exchangeName': 'NasdaqGS',
'fromCurrency': None,
'lastMarket': None,
'longName': 'Facebook, Inc.',
'marketCap': 960766541824,
'marketState': 'REGULAR',
'maxAge': 1,
'openInterest': None,
'postMarketChange': None,
'postMarketPrice': None,
'preMarketChange': 3.51001,
'preMarketChangePercent': 0.0103239,
'preMarketPrice': 343.5,
'preMarketSource': 'FREE_REALTIME',
'preMarketTime': 1634736599,
'priceHint': 2,
'quoteSourceName': 'Nasdaq Real Time Price',
'quoteType': 'EQUITY',
'regularMarketChange': 0.7750244,
'regularMarketChangePercent': 0.0022795508,
'regularMarketDayHigh': 343.94,
'regularMarketDayLow': 339.7,
'regularMarketOpen': 343.445,
'regularMarketPreviousClose': 339.99,
'regularMarketPrice': 340.765,
'regularMarketSource': 'FREE_REALTIME',
'regularMarketTime': 1634749118,
'regularMarketVolume': 8538416,
'shortName': 'Facebook, Inc.',
'strikePrice': None,
'symbol': 'FB',
'toCurrency': None,
'underlyingSymbol': None,
'volume24Hr': None,
'volumeAllCurrencies': None}
Я хотел бы получить только краткое имя, обычную рыночную цену и символ

Я знаю, что если я хочу извлечь одно значение, я должен запустить


но есть ли способ сохранить все 3 значения в ответе?

Комментарии:

1. response = [yf.Ticker("FB").stats()["price"]["shortName'], yf.Ticker("FB").stats()["price"]["regularMarketPrice'], yf.Ticker("FB").stats()["price"]["symbol']] ?

2. Спасибо Ардж Адриансену, это работает, но есть ли способ сделать это, не вызывая статистику() несколько раз?

3. Сначала сохраните yf.Ticker("FB").stats()["price"] как переменную

4. Дело в том, что у меня уже есть это, как описано выше, но я пытаюсь найти самый быстрый способ извлечения данных, так как этот код написан как функция, которая работает циклически, чтобы получить данные о многих запасах, поэтому это может занять некоторое время. Как ты думаешь, это самый быстрый способ?

Ответ №1:

Предполагая output , что словарь, который вы показываете, хранится в response переменной, вы можете попробовать это —



Ответ №2:

@RJ правильно выразился в комментариях, но вот вам некоторое объяснение:

В этом случае, yf.Ticker("FB").stats()["price"]["shortName"] возвращается вам весь словарь. Таким образом, все значения возвращаются и сохраняются в response .

Так что вы можете просто сделать:


Комментарии:

1. Дело в том, что у меня уже есть это, как описано выше, но я пытаюсь найти самый быстрый способ извлечения данных, так как этот код написан как функция, которая работает циклически, чтобы получить данные о многих запасах, поэтому это может занять некоторое время. Как ты думаешь, это самый быстрый способ?

2. Если вы посмотрите справку по библиотеке, там объясняется, что вы можете извлекать несколько символов одновременно.

3. Вам следует обновить / заменить свой вопрос вопросом «Как мне быстрее получать данные из Yahoo Finance?» или аналогичным. Мы отвечаем на заданный вами вопрос, который просто касается получения значений из словаря.

Ответ №3: