Print dict in sorted order

Kamilche klachemin at comcast.net
Sun Jan 29 21:06:39 CET 2006


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()




More information about the Python-list mailing list