OK, I did't know if you were able to re-organize the data. I know nothing about AWS load balancers, but it's unfortunate that the data is laid out in a way that makes dealing with it difficult.
But it sounds like you have worked it out. Best of luck. Irv > On Apr 9, 2017, at 2:21 PM, Kenton Brede <kbr...@gmail.com> wrote: > > 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']) >>> >>> Hope this helps, >>> >>> Irv >>> >>> >>> >>>> On Apr 8, 2017, at 5:55 PM, Kenton Brede <kbr...@gmail.com> wrote: >>>> >>>> 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 >>>> >>> >> >> -- >> https://mail.python.org/mailman/listinfo/python-list >> > -- > https://mail.python.org/mailman/listinfo/python-list > -- https://mail.python.org/mailman/listinfo/python-list