[EMAIL PROTECTED] wrote: > I am wondering if there is a dictionary data type that allows me to > define the order of access when iterating it using items/keys etc. ? > > An example: > > a=dict(a=dict(), c=dict(), h=dict()) > prefer=['e','h', 'a'] > > for x in a.values: print x > > would give me > {h:dict()}, {a:dict()}, then the rest which I don't care about the > order ?
a straight-forward implementation should be pretty efficient: for k in prefer: try: v = d.pop(k) except KeyError: pass else: ... deal with k, v ... for k, v in d.iteritems(): ... deal with k, v ... or, non-destructive: for k in prefer: try: v = d[k] except KeyError: pass else: ... deal with k, v ... for k, v in d.iteritems(): if k not in prefer: ... deal with k, v ... the latter is trivial to convert into a helper generator: def ordered_items(d, prefer): for k in prefer: try: v = d[k] except KeyError: pass else: yield k, v for k, v in d.iteritems(): if k not in prefer: yield k, v for k, v in ordered_items(d, prefer): ... deal with k, v ... if you insist on having this behaviour in a type rather than a helper, subclass dict and add ordered_items as a method. </F> -- http://mail.python.org/mailman/listinfo/python-list