On Tue, Jul 19, 2011 at 7:20 AM, J <jnr.gonza...@googlemail.com> wrote:
> Hi guys,
>
> Thank you for your suggestions.  I have managed to get my whole script to 
> execute in under 10 seconds by changing the 'for loop' I posted above to the 
> following:-
>
> for opco in Cn:
>        for service in Cn[opco]:
>                ack = set(Cn[opco][service]['RECV']) & set(Pr['13'])
>                for jarid in ack:
>                        Cn[opco][service].setdefault('ACK', set()).add(jarid)
>                nack = set(Cn[opco][service]['RECV']) & set(Pr['14'])
>                for jarid in nack:
>                        Cn[opco][service].setdefault('NACK', set()).add(jarid)
>                retry = set(Cn[opco][service]['RECV']) & set(Pr['504'])
>                for jarid in retry:
>                        Cn[opco][service].setdefault('RETRY', set()).add(jarid)
>                retry1 = set(Cn[opco][service]['RECV']) & set(Pr['505'])
>                for jarid in retry1:
>                        Cn[opco][service].setdefault('RETRY', set()).add(jarid)

Code duplication ahoy! Let's refactor that:

pairs = [('ACK', '13'), ('NACK', '14'), ('RETRY', '504'), ('RETRY', '505')]
for opco in Cn:
    for service in Cn[opco]:
        for msg, prkey in pairs:
            ids = set(Cn[opco][service]['RECV']) & set(Pr[prkey])
            for jarid in ids:
                Cn[opco][service].setdefault(msg, set()).add(jarid)

Cheers,
Chris
--
http://rebertia.com
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to