Doppel
Doppel

Reputation: 7

nested dictionary sorting

I've been trying to figure out how to sort these dictionaries: d1 and d2inside the dictionary d3.

d1 = {'eggs':1, 'cheese':1}
d2 = {'cake':1, 'cream':1}
d3 = {'breakfast':{},'dessert':{}}
d3['breakfast'] = d1
d3['dessert'] = d2
for k,v in sorted(d3.items()):
    for k,v in sorted(d3['breakfast'].items()):
        for k,v in sorted(d3.items()):
            print(k,v)

This is the output:

breakfast {'eggs': 1, 'cheese': 1}
dessert {'cream': 1, 'cake': 1}
breakfast {'eggs': 1, 'cheese': 1}
dessert {'cream': 1, 'cake': 1}
breakfast {'eggs': 1, 'cheese': 1}
dessert {'cream': 1, 'cake': 1}
breakfast {'eggs': 1, 'cheese': 1}
dessert {'cream': 1, 'cake': 1}

It sorts the two breakfast and dessert correctly, then inside dessert, 'cream' and 'eggs' are in the wrong order.

It should be:

dessert {'cake':1, 'cream':1}

and it also prints the "sorted" dictionary d3 four times, and I'm not exactly sure why.

For all I know, there could be a more effective way to be doing this, so any information is welcome.

Upvotes: 0

Views: 67

Answers (2)

Athar
Athar

Reputation: 1073

d1 = {'eggs':1, 'cheese':1}
d2 = {'cake':1, 'cream':1}
d3 = {'breakfast':{},'dessert':{}}
d3['breakfast'] = d1
d3['dessert'] = d2
for key,val in sorted(d3.items()):
    print(key,val)

Upvotes: 0

James
James

Reputation: 2741

So your algorithm has a few problems, mostly that you're nesting way too many times and looping over the same thing each time. Here's a better algorithm:

for k,v in sorted(d3.items()):
    print(k + ":")
    for k2,v2 in sorted(v.items()):
        print("\t" + k2 + ", " + str(v2))

It formats the answer like this:

breakfast:
    cheese, 1
    eggs, 1
dessert:
    cake, 1
    cream, 1

I wasn't sure what your intended format is - hopefully you can modify it to be what you'd like. As you can see, this time the loop iterates first over d3, then over the elements of d3, rather than d3 again. This means that you'll go another level deep in the nested dictionary, rather than what you were doing before which was printing the same dictionary multiple times.

Upvotes: 2

Related Questions