[EMAIL PROTECTED] wrote: > It is simple, but I suggest you to take a look at the speed of that > part of your code into your program. With this you can see the > difference: > > from time import clock > d = dict((i,range(300)) for i in xrange(300)) > > t = clock() > r1 = sum(d.values(), []) > print clock() - t > > t = clock() > r2 = [] > for v in d.values(): r2.extend(v) > print clock() - t
Yes, interesting, and well worth noting 1 for v in d.values(): r1.extend(v) 2 from itertools import chain set(chain(*d.itervalues())) 3 set(v for t in d.values() for v in t) 4 sum(d.values(), []) 5 reduce((lambda l,v: l+v), d.values()) on IBM R60e [CoreDuo 1.6MHz/2GB] d = dict((i,range(x)) for i in xrange(x)) x t1 t2 t3 t4 t5 300 0.0 0.02 0.04 0.31 0.32 500 0.01 0.09 0.1 1.67 1.69 1000 0.02 0.3 0.4 16.17 16.15 0.03 0.28 0.42 16.37 16.31 1500 0.03 0.76 0.94 57.05 57.13 2000 0.07 1.2 1.66 136.6 136.97 2500 0.11 2.34 2.64 268.44 268.85 but on the other hand, as the intended application is a small command line app where x is unlikely to reach double figures and there are only two users, myself included: d = {'a':['ASLIB','Aslib'],'j':['JDOC','jdoc'],'x':['test','alt','3rd'],'y':['single',]} 0.0 0.0 0.0 0.0 0.0 And sum(d.values(), []) has the advantage of raising a TypeError in the case of a possible mangled input. {'a':['ASLIB','Aslib'],'j':['JDOC','jdoc'],'x':['test','alt','3rd'],'y':'single'} r1 ['ASLIB', 'Aslib', 'test', 'alt', '3rd', 'JDOC', 'jdoc', 's', 'i', 'n', 'g', 'l', 'e'] r2 set(['Aslib', 'JDOC', 'g', '3rd', 'i', 'l', 'n', 'ASLIB', 's', 'test', 'jdoc', 'alt', 'e']) r4 = sum(d.values(), []) TypeError: can only concatenate list (not "str") to list -- djc -- http://mail.python.org/mailman/listinfo/python-list