Re: Need help with getting Key, Value out of dicts in lists

2017-04-09 Thread Kenton Brede
Thanks for the response Irv.  On one level I'm glad to know that someone
more knowledgeable than myself sees this data structure as difficult. :)  I
was thinking it was an easy problem to solve.  Unfortunately that is the
structure I have to use.

The data comes from pulling back tag information on AWS load balancers.  So
each list within the overall parent list are tags from one load balancer.
Each dict pair inside the inner lists, is one tag.  To simplify, below is a
representation of one load balancer and two tags.  The parent list contains
multiple inner lists, each for a single load balancer.

[
[
{
"Value": "20176783-181622543367489",
"Key": "Resource_group_id"
},
{
"Value": "shibboleth-prd-alb",
"Key": "Name"
}
],
]

I have an ugly solution of 'for loops' and 'if statements' that works,
which uses a different path to get to the information.  I was just hoping
to be more direct by matching the 'Value' of  'Key: Resource_group_id' and
pull back the 'Value' of 'Key: Name' and other tags as needed.

Thanks,

Kenton Brede





On Sat, Apr 8, 2017 at 11:29 PM, Irv Kalb <i...@furrypants.com> wrote:

> [ Sorry, forgot the important stuff! ]
>
> What you want to do is tricky because your data structure is difficult to
> deal with.  My guess is that it has to do with a misconception about how a
> Python dictionary works. Yes, it is a series of key/value pairs, but not
> the way you have it.   It looks like you put together dictionaries where
> each dictionary has a 'Value' and a 'Key'.
>
> Instead, _each_ item in a dictionary is a key value pair. The key is
> typically a string, and the value is obviously some value associated with
> that key.  For example, if you have the ability to rebuild your data a
> different way, it looks like it would be better to deal with it something
> like this:
>
> aList = [
>{'Name':'shibboleth-prd', 'Billing':'kmvu',
> 'Resource_group_id': '20179204-181622543367489'},
>{'Name':'shibboleth-tst', 'Resource_group_id':'20172857-
> 152037106154311'}
>]
>
> This is a list of dictionaries.  However, I'm not sure what you are trying
> to do with this data.  I'm guessing that you want to match a resource group
> id, and if you find it, print the name and the billing info if they exist.
> If so, you may want something like this (untested):
>
> def printInfo(thisGroupID):
>for thisDict in aList:# loop through all dictionaries in the list
> if thisGroupID == aList['Resource_group_id']:
>if 'Name' in thisDict:   # if thisDict has a key called 'Name'
>print ('Name is', thisDict['Dict'])
>if 'Billing' in thisDict:   #  if thisDict has a key called
> 'Billing'
>print ('Billing is', thisDict['Billing'])
>
> Hope this helps,
>
> Irv
> > On Apr 8, 2017, at 9:04 PM, Irv Kalb <i...@furrypants.com> wrote:
> >
> > What you want to do is tricky because your data structure is difficult
> to deal with.  My guess is that it has to do with a misconception about how
> a Python dictionary works. Yes, it is a series of key/value pairs, but not
> the way you have it.   It looks like you put together dictionaries where
> each dictionary has a 'Value' and a 'Key'.
> >
> > Instead, _each_ item in a dictionary is a key value pair. The key is
> typically a string, and the value is obviously some value associated with
> that key.  For example, if you have the ability to rebuild your data a
> different way, it looks like it would be better to deal with it something
> like this:
> >
> > aList = [
> >{'Name':'shibboleth-prd', 'Billing':'kmvu',
> 'Resource_group_id': '20179204-181622543367489'},
> >{'Name':'shibboleth-tst', 'Resource_group_id':'20172857-
> 152037106154311'}
> >]
> >
> > This is a list of dictionaries.  However, I'm not sure what you are
> trying to do with this data.  I'm guessing that you want to match a
> resource group id, and if you find it, print the name and the billing info
> if they exist.  If so, you may want something like this (untested):
> >
> > def printInfo(thisGroupID):
> >for thisDict in aList:# loop through all dictionaries in the list
> >   if thisGroupID == aList['Resource_group_id']:
> >if 'Name' in thisDict:   # if thisDict has a key called 'Name'
> >print ('Name is', thisDict['Dict'])
> >if 'Billing' in thisDict:   #  if thisDict has a key called
> 'Billing'
> >print ('Billing is', thisDict['Billing'])
> >
>

Need help with getting Key, Value out of dicts in lists

2017-04-08 Thread Kenton Brede
This is an example of the data I'm working with.  The key/value pairs may
come in any order. There are some keys like the 'Resource_group_id' key and
the 'Name' key which will always be present, but other lists may have
unique keys.

alist = [[{u'Value': 'shibboleth-prd', u'Key': 'Name'}, {u'Value': 'kvmu',
u'Key': 'Billing'},
{u'Value': '20179204-181622543367489', u'Key':
'Resource_group_id'}],
   [{u'Value': '20172857-152037106154311', u'Key':
'Resource_group_id'},
{u'Value': 'shibboleth-tst', u'Key': 'Name'}]]

What I want to do is something along the lines of:

for a in alist:
if a['Resource_group_id'] == '01234829-2041523815431':
print the Value of 'Name'
print the Value of 'Billing'

I've found I can do the following, to print the value of 'Name' but that
only works if the 'Resource_group_id' key is the first key in the list and
the 'Name' key is in the second slot.  If each list contained the same
keys, I could probably sort the keys and use [num] to pull back values, but
they don't.

for a in alist:
if a[0]['Key'] == 'Resource_group_id' and a[0]['Value'] ==
'20172857-152037106154311':
print a[1]['Value']

There has to be a way to do this but I've been pounding away at this for
hours.  Any help appreciated.  I'm new to Python and not a programmer, so
go easy on me. :)
-- 
https://mail.python.org/mailman/listinfo/python-list