2

This is the code on Python 2 requesting data from an API

 results = json.load(urllib.urlopen("https://www.kimonolabs.com/api/ano64pm6?apikey=9ummN7C6KMHu9aErm49ixoy2ZySmaKCm"))
 print results

This prints

{u'count': 27,
 u'frequency': u'Daily',
 u'lastrunstatus': u'success',
 u'lastsuccess': u'Fri Feb 27 2015 21:33:02 GMT+0000 (UTC)',
 u'name': u'mmoga',
 u'newdata': True,
 u'nextrun': u'Sat Feb 28 2015 21:33:03 GMT+0000 (UTC)',
 u'results': {u'collection1': [{u'price': u'\xa3\xa03.47'},
   {u'price': u'\xa3\xa05.20'},
   {u'price': u'\xa3\xa06.92'},
   {u'price': u'\xa3\xa08.63'},
   {u'price': u'\xa3\xa010.34'},
   {u'price': u'\xa3\xa012.04'},
   {u'price': u'\xa3\xa013.73'},
   {u'price': u'\xa3\xa015.42'},
   {u'price': u'\xa3\xa017.09'},
   {u'price': u'\xa3\xa025.59'},
   {u'price': u'\xa3\xa034.05'},
   {u'price': u'\xa3\xa042.48'},
   {u'price': u'\xa3\xa050.88'},
   {u'price': u'\xa3\xa059.23'},
   {u'price': u'\xa3\xa067.56'},
   {u'price': u'\xa3\xa075.85'},
   {u'price': u'\xa3\xa084.11'},
   {u'price': u'\xa3\xa0100.73'},
   {u'price': u'\xa3\xa0117.27'},
   {u'price': u'\xa3\xa0133.75'},
   {u'price': u'\xa3\xa0150.17'},
   {u'price': u'\xa3\xa0166.51'},
   {u'price': u'\xa3\xa0182.79'},
   {u'price': u'\xa3\xa0198.99'},
   {u'price': u'\xa3\xa0215.13'},
   {u'price': u'\xa3\xa0231.20'},
   {u'price': u'\xa3\xa0247.28'}]},
 u'thisversionrun': u'Fri Feb 27 2015 21:32:48 GMT+0000 (UTC)',
 u'thisversionstatus': u'success',
 u'version': 3}

I need to call price and get the float next to it. I have tried some pretty simple things so far like,

print requests[price]

and also

print requests[results/collection1/price]

I have no idea how to do this and am new to programming and I cant find any useful tutorials on this so just a point in the right direction would be helpfull

Daniel Roseman
  • 588,541
  • 66
  • 880
  • 895
andy
  • 41
  • 5
  • possible duplicate of [Python: Easily access deeply nested dict (get and set)](http://stackoverflow.com/questions/3797957/python-easily-access-deeply-nested-dict-get-and-set) – ivan_pozdeev Feb 27 '15 at 22:34
  • 2
    I have reformatted your data to show the nested structure, that should help you work out how to access it. – Daniel Roseman Feb 27 '15 at 22:35

2 Answers2

3
import  requests
results = requests.get("https://www.kimonolabs.com/api/ano64pm6?apikey=9ummN7C6KMHu9aErm49ixoy2ZySmaKCm").json()
print([x["price"] for x in results["results"]["collection1"]])
['£\xa03.47', '£\xa05.20', '£\xa06.92', '£\xa08.63', '£\xa010.34', '£\xa012.04', '£\xa013.73', '£\xa015.42', '£\xa017.09', '£\xa025.59', '£\xa034.05', '£\xa042.48', '£\xa050.88', '£\xa059.23', '£\xa067.56', '£\xa075.85', '£\xa084.11', '£\xa0100.73', '£\xa0117.27', '£\xa0133.75', '£\xa0150.17', '£\xa0166.51', '£\xa0182.79', '£\xa0198.99', '£\xa0215.13', '£\xa0231.20', '£\xa0247.28']

You can get the json directly using requests calling .json().

print(results["results"]["collection1"])

[{'price': '£\xa03.47'}, {'price': '£\xa05.20'}, {'price': '£\xa06.92'}, {'price': '£\xa08.63'}, {'price': '£\xa010.34'}, {'price': '£\xa012.04'}, {'price': '£\xa013.73'}, {'price': '£\xa015.42'}, {'price': '£\xa017.09'}, {'price': '£\xa025.59'}, {'price': '£\xa034.05'}, {'price': '£\xa042.48'}, {'price': '£\xa050.88'}, {'price': '£\xa059.23'}, {'price': '£\xa067.56'}, {'price': '£\xa075.85'}, {'price': '£\xa084.11'}, {'price': '£\xa0100.73'}, {'price': '£\xa0117.27'}, {'price': '£\xa0133.75'}, {'price': '£\xa0150.17'}, {'price': '£\xa0166.51'}, {'price': '£\xa0182.79'}, {'price': '£\xa0198.99'}, {'price': '£\xa0215.13'}, {'price': '£\xa0231.20'}, {'price': '£\xa0247.28'}]

results["results"]["collection1"] returns a list of dicts, you then get the price from each dict using the key price as you iterate over the list.

Padraic Cunningham
  • 176,452
  • 29
  • 245
  • 321
1

Using for loop

prices =  requests['results']['collection1']

for dict in prices:
   price = dict['price']
   #here you can use your price
   print dict['price'] # prints price

Using compression list.

 prices = [d['price'] for d in requests['results']['collection1']]
levi
  • 22,001
  • 7
  • 73
  • 74