Как извлечь данные из списка словарей Python

#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]