[Tutor] working with multiple sets

kevin parks kp8 at me.com
Tue Sep 8 17:51:12 CEST 2009


Actually,

This seems like it works:

		lookup[x].sort()


in like so:

def foo():
	lookup = collections.defaultdict(list)
	x = range(10)
	y = range(5, 15)
	z = range(8, 22)
	sets = {'x': set(x), 'y': set(y), 'z': set(z)}
	for key, value in sets.items():
		for element in value:
			lookup[element].append(key)
	print
	print lookup, "\n\n"
	for x in lookup:
		lookup[x].sort()
		print x, lookup[x]
		#print type(lookup)
	print
	#print sets

I realized that i was trying to apply the standard:

	k = lookup.keys()
	k.sort()

in the wrong way and in the wrong place (i accidentally cut it out in  
my message when i removed the scaffolding)

I might try the tuple things to for educational purposes. I am  
somewhat nervous about using something other than
a built in type as i am not familiar with collections and it isn't  
well covered in beginner books or the docs.



On Sep 9, 2009, at 12:44 AM, Kent Johnson wrote:

> On Tue, Sep 8, 2009 at 10:07 AM, kevin parks<kp8 at me.com> wrote:
>> I also notice that if i do:
>>
>>
>> def foo():
>>        lookup = collections.defaultdict(list)
>>        x = range(10)
>>        y = range(5, 15)
>>        z = range(8, 22)
>>        sets = {'x': set(x), 'y': set(y), 'z': set(z)}
>>        for key, value in sets.items():
>>                for element in value:
>>                        lookup[element].append(key)
>>        for x in lookup:
>>                print x, lookup[x]
>>        print
>>
>> in oder to print more clearly what I want to see, the sets (as  
>> usual for a
>> mapping type) are not always in order. Note that from 5 to 7 for  
>> example 'y'
>> is listed in front of 'x' and 8 & 9 have 'y', 'x', 'z' and not 'x',  
>> 'y', 'z'
>
> Dictionaries and sets are not ordered. The order of items in
> sets.items() is an implementation detail, not something you can depend
> on.
>
>> ... I am not clear on how to sort that as the dictionary      method
>> lookup.sort() either doesn't work or i have tried it in all the wrong
>> places.
>
> lookup can't be sorted directly as it is a (default)dict. Anyway it is
> lookup[x] that you want to sort. Try
>  print x, sorted(lookup[x])
>
> or
> for x in lookup:
>  lookup[x].sort() # list.sort() sorts the list in place and does not
> return a value.
>  print x, lookup[x]
>
> Another alternative would be to use a list of tuples instead of a dict
> for sets, then the lookup values would be created in the desired
> order, e.g.
> sets = [ (x', set(x)), ('y', set(y)), ('z', set(z)) ]
> for key, value in sets:
>  # etc
>
> Kent



More information about the Tutor mailing list