On Tue, Jul 27, 2010 at 4:15 PM, Vikram <[email protected]> wrote:
> > Hi Anand,vijay, and others, > we have python 2.4.3 at our workplace and defaultdict is not present in the > collections module in this python version. > > >>> dir(collections) > ['__doc__', '__file__', '__name__', 'deque'] > >From collections module documentation. "Changed in version 2.5: Added defaultdict<http://docs.python.org/library/collections.html#collections.defaultdict> ." So it is not present in Python <=2.4. > >>> > > Also, could u suggest some way to tackle the following problem: > Given: > > l = [['NM100', 1, 3], ['NM100', 7, 10], ['NM200', 13, 16]] > > want something like: > z = [['NM100',[1,2,3,7,8,9,10]],['NM200',[13,14,15,16]]] > Why don't you attempt an approach yourself before asking for help ? Now that you have already seen some solutions to the first query, isn't that better ? > > On Tue, 27 Jul 2010 15:33:00 +0530 wrote > >On Tue, Jul 27, 2010 at 3:16 PM, Anand Balachandran Pillai < > > [email protected]> wrote: > > > > > > > > > > > On Tue, Jul 27, 2010 at 2:29 PM, Shekhar Tiwatne wrote: > > > > > >> On Tuesday 27 July 2010 12:18 PM, Vikram wrote: > > >> > > >>> have the following: > > >>> > > >>> > > >>> > > >>>> x > > >>>>>> > > >>>>>> > > >>>>> [['NM100', 1, 2], ['NM100', 3, 4], ['NM200', 5, 6]] > > >>> > > >>> > > >>>> for i in x: > > >>>>>> > > >>>>>> > > >>>>> ... print i > > >>> ... > > >>> ['NM100', 1, 2] > > >>> ['NM100', 3, 4] > > >>> ['NM200', 5, 6] > > >>> > > >>> ------ > > >>> how does one obtain list z such that > > >>> > > >>> z = [['NM100',1,2,3,4],['NM200',5,6]] > > >>> > > >> > > > This problem begs for the use of collections.defaultdict class. > > > > > > All the other solutions are ok, but defaultdict is meant to solve > > > problems like this. > > > > > > Here is the solution. > > > > > > >>> import collections > > > >>> l=[['NM100', 1, 2], ['NM100', 3, 4], ['NM200', 5, 6]] > > > >>> l2=[[x[0], x[1:]] for x in l] > > > >>> d = collections.defaultdict(list) > > > >>> for k, v in l2: d[k].extend(v) > > > >>> [[k, v] for k,v in d.iteritems()] > > > [['NM100', [1, 2, 3, 4]], ['NM200', [5, 6]]] > > > > > > What you want are the elements of the final list. > > > > > > > I didn't notice you want > > > > z = [['NM100',1,2,3,4],['NM200',5,6]] > > > > rather than, > > > > z= [['NM100', [1, 2, 3, 4]], ['NM200', [5, 6]]] > > > > So replace last line with, > > > > >>> [[k] + v for k,v in d.iteritems()] > > [['NM100', 1, 2, 3, 4], ['NM200', 5, 6]] > > > > > > > > > --Anand > > > > > > > > > > > > > > > > > > > > -- > > --Anand > > _______________________________________________ > > BangPypers mailing list > > [email protected] > > http://mail.python.org/mailman/listinfo/bangpypers > > _______________________________________________ > BangPypers mailing list > [email protected] > http://mail.python.org/mailman/listinfo/bangpypers > -- --Anand _______________________________________________ BangPypers mailing list [email protected] http://mail.python.org/mailman/listinfo/bangpypers
