Ok, here they are all still:
import ast, re, json s = "'a':1 'b':2 'c':3" def a_eval(s): s = s.replace(' ', ',') return eval('{%s}' % s) def a_ast(s): s = s.replace(' ', ',') return ast.literal_eval('{%s}' % s) def a_parse(s): d = {} for p in s.split(): k, v = p.split(':') d[k.strip("'")] = int(v) return d def a_re(s): d = [] re.sub(r"'(\w+)':(\w+)", lambda m: d.append(m.groups()), s) return dict((a, int(b)) for a, b in d) def a_json(s): s = s.replace(' ', ',') s = s.replace("'", '"') return json.loads('{%s}' % s)
Results:
0.0753 a_parse 0.1068 a_json 0.1455 a_re 0.2211 a_eval 0.3297 a_ast
And on longer lines, json winner:
long_s = ((s + ' ') * 100).strip() for p in dir(): if p.startswith('a_'): results.append((timeit.timeit('%s("%s")' % (p, long_s), setup, number=100), p)) for p in sorted(results): print '%.4f %s' % p
Results:
0.0166 a_json 0.0528 a_parse 0.0565 a_re 0.0927 a_eval 0.1519 a_ast
source share