Raymond Hettinger wrote:
>> from itertools import count, izip
>>
>> def dict2str(d, preferred_order = ['gid', 'type', 'parent', 'name']):
>>     last = len(preferred_order)
>>     rank = dict(izip(preferred_order, count()))
>>     pairs = d.items()
>>     pairs.sort(key=lambda (k,v): rank.get(k, (last, k, v)))
>>     return '{%s}' % repr(pairs)[1:-1]
> 
> P.S. If you need the string to evaluatable like repr(d), then change
> the last line to:
> 
>     return 'dict(%r)' % pairs
> 
or:

def dict2str(d, preferred_order = ['gid', 'type', 'parent', 'name']):
     pairs = [(item, d[item]) for item in preferred_order]
     #preferred_order = set(preferred_order) # if preferred_order is big
     pairs.extend(sorted((k, v) for k,v in d.iteritems() if k not in 
preferred_order))
     return '{%s}' % repr(pairs)[1:-1]

Michael

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to