{ '0':'c->c->a' ,'1':'a->b->a' .........}

Arnaud Delobelle arnodel at gmail.com
Sun Nov 7 15:51:50 EST 2010


chris <ozric at web.de> writes:

> Hi,
>
> have anybody a hint , how i get a dict from non unique id's and their
> different related values.
>
> Thanks for advance
> Chris
>
> ###random data #
> a=range(10)*3
> def seqelem():
>     i=random.randint(0,2)
>     elem=['a','b','c'][i]
>     return elem
>
> s=[seqelem() for t in  range(30)]
> print zip(a,s)
>
> ## favored result:
> { '0':'c->c->a' ,'1':'a->b->a' .........}

Here's one way:

>>> import random
>>> 
>>> a=range(10)*3
>>> def seqelem():
...     i=random.randint(0,2)
...     elem=['a','b','c'][i]
...     return elem
... 
>>> s=[seqelem() for t in  range(30)]
>>> z = zip(a, s)
>>> print z
[(0, 'b'), (1, 'a'), (2, 'b'), (3, 'a'), (4, 'b'), (5, 'c'), (6, 'b'), (7, 'c'), (8, 'b'), (9, 'b'), (0, 'a'), (1, 'b'), (2, 'b'), (3, 'c'), (4, 'c'), (5, 'b'), (6, 'c'), (7, 'a'), (8, 'a'), (9, 'c'), (0, 'b'), (1, 'c'), (2, 'b'), (3, 'a'), (4, 'c'), (5, 'a'), (6, 'c'), (7, 'b'), (8, 'c'), (9, 'c')]
>>> 
>>> from itertools import groupby
>>> from operator import itemgetter
>>> 
>>> z.sort(key=itemgetter(0))
>>> print dict((k, '->'.join(map(itemgetter(1), it))) 
...            for k, it in groupby(z, itemgetter(0)))
{0: 'b->a->b', 1: 'a->b->c', 2: 'b->b->b', 3: 'a->c->a', 4: 'b->c->c', 5: 'c->b->a', 6: 'b->c->c', 7: 'c->a->b', 8: 'b->a->c', 9: 'b->c->c'}

HTH

-- 
Arnaud



More information about the Python-list mailing list