0

I've search a ton of articles here and elsewhere via the Googles, plus read a few related docs over at docs.python.org and still stuck.

I am getting a response from an API like below:

{"status":"active","perms":1,"data":{"40332895":{"user_values":{"delta":-203,"value":53.32,"order":42509}}}}

I have no problem printing the 'status' or 'data'. However, all I can grab is the name of the *user_values*, not the date inside them.

Been at it for way to long and was hoping someone could point me in the right direction. Fairly new to Python and if I need to change how I am doing this because it is bad practices or there is an easier way to get the results I am looking for, please let me know.

Code:

import json
import urllib2

url = urllib2.urlopen('http://URLofAPI.com')
json_url = json.load(url)

api_result = json_url

for doc in api_result['data']['40332895']['user_values']:
    print doc

outputs:
delta
value
order

what I really want to get is the value of them (i.e.: '-203', '53.32', '42509').

I am basically trying to save that data into a list\dict (individually or separately), then print it with other data. I have tried all sorts of things and cannot manage it. I am sure it's probably something super easy that I missing, but it's driving me nuts. :)

Also, I was really expecting the below to give me '42509', but I get an error:

for doc in api_result['data']['40332895']['user_values']['order']

Thanks in advance!

2 Answers 2

2

You're asking for the keys of the user_values dictionary, and getting them. Try this:

uv = api_result['data']['40332895']['user_values']
for doc in uv:
    print uv[doc]
Sign up to request clarification or add additional context in comments.

1 Comment

That's exactly what my problem was. Wow, 10 minutes to get an answer. I shouldn't have beat my head against the wall for so long until I asked for help. Thanks!
1

In your example api_result['data']['40332895']['user_values'] is a dictionary. If you iterate over a dictionary you will get the keys. This is the case in your original example and in mgkrebbs answer. However if you iterate over the .iteritems() (or .items()) of the dictionary you get the (key, value) pairs in a tuple:

uv = api_result['data']['40332895']['user_values']
for key,value in uv.iteritems():
    print key, value

If you only need the values, you iterate over .itervalues()

uv = api_result['data']['40332895']['user_values']
for value in uv.itervalues():
    print value

Or if you only need the values as a list:

my_list = api_result['data']['40332895']['user_values'].values()

The difference between .itervalues() and .values() is that the former gives you an iterable (an object which returns one value at a time, but does not create the structure in memory), while the latter gives you a list.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.