Home > Software design >  Getting Deeper Key Value Pairs from a Dictionary in Python
Getting Deeper Key Value Pairs from a Dictionary in Python

Time:07-20

I'm trying to get particular values out of a large dictionary and I'm having trouble doing so. I'm parsing through data from an API and attempting to get just the name attribute from my response. This is the format of the response I'm getting back:

{'data': 
     [{'id': '5555', 'type': 'proj-pha', 'links': {'self': '{sensitive_url}'}, 'attributes': 
     {'active': True, 'name': 'Plan', 'language': 'plan_l', 'position': 1}, 
     'relationships': {'account': {'links': {'self': '{sensitive_url}', 'related':
     '{sensitive_url}'}}, 'pro-exp': {'links': {'self': 
     '{sensitive_url}', 'related': '{sensitive_url}'}}}}

To clarify, I'm printing out the API response as a dictionary using: print(response.json())

Here is some general code from my script for context:

params = {
    "client_id": CLIENT_ID,
    "client_secret": CLIENT_SECRET,
    "redirect_uri": REDIRECT_URI,
    "response_type": RESPONSE_TYPE
}

token = '{sensitive}'
print("Bearer Token: "   token)
session = requests.session()
session.headers = {"authorization": f"Bearer {token}"}

base_api_endpoint = "{sensitive}"
response = session.get(base_api_endpoint)
print(response.json())

What I want is just the 'name': 'Plan' attribute and that's all. The data provided repeats itself to the next "id" and so on until all the iterations have been posted. I'm trying to query out a list of all of these. I'm not looking for a particular answer on how to loop through these to get all of them though that would be helpful, I'm more focused on being able to just pick out the "name" value by itself.

Thanks!

CodePudding user response:

To get all the names, just use list comprenhension, like this:

[item['attributes']['name'] for item in response['data']]

If you only want the name of the i-th item, just do:

response['data'][i]['attributes']['name']

And the last, if you want the name for a specific id:

def name_by_id(response, id):
    for item in response['data']:
        if item['id'] == id:
            return item['attributes']['name']
    return None
  • Related