I have a code snippet here that prints a dict in an arbitrary order. (Certain keys first, with rest appearing in sorted order). I didn't want to subclass dict, that's error-prone, and overkill for my needs. I just need something that returns a value like dict.__str__, with a key ordering I specify.
If you have any opinions on how it could be made better, I'm all ears! def DictToString(d, preferred_order = ['gid', 'type', 'parent', 'name']): ' Return a string containing the sorted dict' keys = d.keys() keys.sort() sortmax = len(preferred_order) for i in range(sortmax-1, -1, -1): sortkey = preferred_order[i] try: index = keys.index(sortkey) except ValueError: continue temp = keys[index] del keys[index] keys.insert(0, temp) s = [] s.append('{') max = len(keys) for i in range(max): key = keys[i] val = d[key] s.append(repr(key)) s.append(': ') s.append(repr(val)) if i < max-1: s.append(', ') s.append('}') return ''.join(s) def main(): d = {'whatever': 145, 'gid': 12345678901234567890, 'name': 'Name', 'type': 'an egg', 32: 'Thirty-two (32)'} # Convert dicts to strings s1 = str(d) s2 = DictToString(d) print "Python str:", s1 print "Custom str:", s2 # Verify the strings are different assert(s1 != s2) # Convert the strings back to dicts d1 = eval(s1) d2 = eval(s2) # Verify the dicts are equivalent assert(d1 == d2) print "\nSuccess!\n" main() -- http://mail.python.org/mailman/listinfo/python-list