Man, deja-vu, I could have sworn I read this thread months ago... On Thu, Mar 4, 2010 at 2:18 PM, nn <prueba...@latinmail.com> wrote:
> > > lbolla wrote: > > On Mar 4, 3:57 pm, Sneaky Wombat <joe.hr...@gmail.com> wrote: > > > [ {'vlan_or_intf': 'VLAN2021'}, > > > {'vlan_or_intf': 'Interface'}, > > > {'vlan_or_intf': 'Po1'}, > > > {'vlan_or_intf': 'Po306'}, > > > {'vlan_or_intf': 'VLAN2022'}, > > > {'vlan_or_intf': 'Interface'}, > > > {'vlan_or_intf': 'Gi7/33'}, > > > {'vlan_or_intf': 'Po1'}, > > > {'vlan_or_intf': 'Po306'}, > > > {'vlan_or_intf': 'VLAN2051'}, > > > {'vlan_or_intf': 'Interface'}, > > > {'vlan_or_intf': 'Gi9/6'}, > > > {'vlan_or_intf': 'VLAN2052'}, > > > {'vlan_or_intf': 'Interface'}, > > > {'vlan_or_intf': 'Gi9/6'},] > > > > > > I want it to be converted to: > > > > > > [{'2021':['Po1','Po306']},{'2022':['Gi7/33','Po1','Po306']},etc etc] > > > > > > I was going to write a def to loop through and look for certain pre- > > > compiled regexs, and then put them in a new dictionary and append to a > > > list, but I'm having trouble thinking of a good way to capture each > > > dictionary. Each dictionary will have a key that is the vlan and the > > > value will be a list of interfaces that participate in that vlan. > > > Each list will be variable, many containing only one interface and > > > some containing many interfaces. > > > > > > I thought about using itertools, but i only use that for fixed data. > > > I don't know of a good way to loop over variably sized data. I was > > > wondering if anyone had any ideas about a good way to convert this > > > list or dictionary into the right format that I need. The solution I > > > come up with will most likely be ugly and error prone, so I thought > > > i'd ask this python list while I work. Hopefully I learn a better way > > > to solve this problem. > > > > > > Thanks! > > > > > > I also have the data in a list, > > > > > > [ 'VLAN4065', > > > 'Interface', > > > 'Gi9/6', > > > 'Po2', > > > 'Po3', > > > 'Po306', > > > 'VLAN4068', > > > 'Interface', > > > 'Gi9/6', > > > 'VLAN4069', > > > 'Interface', > > > 'Gi9/6',] > > > > > > > > =================================== > > > > from itertools import groupby > > > > data = \ > > [ {'vlan_or_intf': 'VLAN2021'}, > > {'vlan_or_intf': 'Interface'}, > > {'vlan_or_intf': 'Po1'}, > > {'vlan_or_intf': 'Po306'}, > > {'vlan_or_intf': 'VLAN2022'}, > > {'vlan_or_intf': 'Interface'}, > > {'vlan_or_intf': 'Gi7/33'}, > > {'vlan_or_intf': 'Po1'}, > > {'vlan_or_intf': 'Po306'}, > > {'vlan_or_intf': 'VLAN2051'}, > > {'vlan_or_intf': 'Interface'}, > > {'vlan_or_intf': 'Gi9/6'}, > > {'vlan_or_intf': 'VLAN2052'}, > > {'vlan_or_intf': 'Interface'}, > > {'vlan_or_intf': 'Gi9/6'},] > > > > def clean_up(lst): > > return [d.values()[0] for d in data if d.values()[0] != > 'Interface'] > > > > out = {} > > for k, g in groupby(clean_up(data) , key=lambda s: > > s.startswith('VLAN')): > > if k: > > key = list(g)[0].replace('VLAN','') > > else: > > out[key] = list(g) > > > > print out > > =================================== > > > > hth, > > L. > > Good use of groupby. Here is what I ended up coming up: > > from itertools import groupby > laninfo=[ 'VLAN4065', > 'Interface', > 'Gi9/6', > 'Po2', > 'Po3', > 'Po306', > 'VLAN4068', > 'Interface', > 'Gi9/6', > 'VLAN4069', > 'Interface', > 'Gi9/6',] > > def splitgrp(s, f=[False]): > f[0]^=s.startswith('VLAN') > return f[0] > lanlst=(list(g) for k,g in groupby(laninfo,key=splitgrp)) > out={item[0][4:]:item[2:] for item in lanlst} > print(out) > -- > http://mail.python.org/mailman/listinfo/python-list >
-- http://mail.python.org/mailman/listinfo/python-list