It's fairly simple to replace dict
comprehensions and defaultdict
operations with equivalent operations on collections.OrderedDict
instances. Note that OrderedDict
s are a bit slower than regular dicts (and defaultdict
s), but only by a constant factor (they still have the same big-O performance).
Rather than a defaultdict
, create an OrderedDict
and use setdefault
to create default values when necessary:
dd = OrderedDict()
for dc in map(etree_to_dict, children):
for k, v in dc.iteritems():
dd.setdefault(k, []).append(v)
Replace dict comprehensions with a calls to OrderedDict
with a list or generator expression that yields (key, value)
tuples, e.g.:
d = OrderedDict([(t.tag, OrderedDict((k, v[0] if len(v) == 1 else v)
for k, v in dd.iteritems()))])