#python #dictionary
#python #словарь
Вопрос:
Я ищу, чтобы извлечь «максимум» из всех 3 списков ниже. Я не уверен, как поступить.
[
{
'timestamp':'2019-04-09T23:41:00.000Z',
'symbol':'XBTUSD',
'open':5189.5,
'high':5190,
'low':5189,
'close':5190,
'trades':14,
'volume':1246,
'vwap':5189.4136,
'lastSize':480,
'turnover':24010476,
'homeNotional':0.24010476,
'foreignNotional':1246
},
{
'timestamp':'2019-04-09T23:40:00.000Z',
'symbol':'XBTUSD',
'open':5190,
'high':5190,
'low':5189.5,
'close':5189.5,
'trades':4,
'volume':540,
'vwap':5189.9523,
'lastSize':20,
'turnover':10404800,
'homeNotional':0.104048,
'foreignNotional':540
},
{
'timestamp':'2019-04-09T23:39:00.000Z',
'symbol':'XBTUSD',
'open':5197.5,
'high':5195.5,
'low':5187,
'close':5190,
'trades':56,
'volume':24286,
'vwap':5189.6829,
'lastSize':1058,
'turnover':467970327,
'homeNotional':4.67970327,
'foreignNotional':24286
}
]
Я пытался просто использовать high = [0:]["high"]
— но это возвращает
TypeError: list indices must be integers or slices, not str
Какая была бы подходящая команда, чтобы иметь все 3 «высоких» из каждого списка? Для этого экземпляра он должен вернуться 5190, 5190, 5195.5
.
Комментарии:
1. Итак, вопрос заключается не в доступе к значению в словаре, а в доступе к значениям того же ключа в списке словарей.
2. Да, надеюсь, формулировка верна в op
Ответ №1:
Используйте понимание списка: [ x['high'] for x in data ]
если данные — это массив, который вы опубликовали в своем исходном сообщении.
Ответ №2:
Я думаю, что приведенный ниже ответ поможет
Я назначил ваш список listofDict
и использую цикл for для перебора всех элементов списка.
Поскольку listofDict
элемент имеет тип dict, я использую ключ для извлечения значения.
Здесь ключ высокий
listofDict=[
{
'timestamp':'2019-04-09T23:41:00.000Z',
'symbol':'XBTUSD',
'open':5189.5,
'high':5190,
'low':5189,
'close':5190,
'trades':14,
'volume':1246,
'vwap':5189.4136,
'lastSize':480,
'turnover':24010476,
'homeNotional':0.24010476,
'foreignNotional':1246
},
{
'timestamp':'2019-04-09T23:40:00.000Z',
'symbol':'XBTUSD',
'open':5190,
'high':5190,
'low':5189.5,
'close':5189.5,
'trades':4,
'volume':540,
'vwap':5189.9523,
'lastSize':20,
'turnover':10404800,
'homeNotional':0.104048,
'foreignNotional':540
},
{
'timestamp':'2019-04-09T23:39:00.000Z',
'symbol':'XBTUSD',
'open':5197.5,
'high':5195.5,
'low':5187,
'close':5190,
'trades':56,
'volume':24286,
'vwap':5189.6829,
'lastSize':1058,
'turnover':467970327,
'homeNotional':4.67970327,
'foreignNotional':24286
}
]
for l in listofDict:
print (l['high'])
Ответ №3:
Вы можете использовать pandas
и конвертировать в dataframe
/table, а затем получить df["high"]
.
Если вам понадобятся только два значения, тогда вы можете сделать df['high'][:2]
. Это похоже на то, что вы пробовали.
import pandas as pd
data = [
{
'timestamp':'2019-04-09T23:41:00.000Z',
'symbol':'XBTUSD',
'open':5189.5,
'high':5190,
'low':5189,
'close':5190,
'trades':14,
'volume':1246,
'vwap':5189.4136,
'lastSize':480,
'turnover':24010476,
'homeNotional':0.24010476,
'foreignNotional':1246
},
{
'timestamp':'2019-04-09T23:40:00.000Z',
'symbol':'XBTUSD',
'open':5190,
'high':5190,
'low':5189.5,
'close':5189.5,
'trades':4,
'volume':540,
'vwap':5189.9523,
'lastSize':20,
'turnover':10404800,
'homeNotional':0.104048,
'foreignNotional':540
},
{
'timestamp':'2019-04-09T23:39:00.000Z',
'symbol':'XBTUSD',
'open':5197.5,
'high':5195.5,
'low':5187,
'close':5190,
'trades':56,
'volume':24286,
'vwap':5189.6829,
'lastSize':1058,
'turnover':467970327,
'homeNotional':4.67970327,
'foreignNotional':24286
}
]
df = pd.DataFrame(data)
print(df['high'].to_list())
[5190.0, 5190.0, 5195.5]