How to use list as key of dictionary?
Steven D'Aprano
steve at REMOVE-THIS-cybersource.com.au
Tue Nov 6 11:00:15 EST 2007
More information about the Python-list mailing list
Tue Nov 6 11:00:15 EST 2007
- Previous message (by thread): How to use list as key of dictionary?
- Next message (by thread): How to use list as key of dictionary?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Tue, 06 Nov 2007 11:25:29 +0000, Duncan Booth wrote: > Steven D'Aprano <steve at REMOVE-THIS-cybersource.com.au> wrote: > > > >> Not quite, because that will also convert strings to tuples, which may >> not be what you want for a general solution. > > I take it you didn't actually try the original code then. No I didn't. > Converting strings to tuples is not something it did. Ah yes, you're right. The old "single characters are sequences too" gotcha bites again. >> That works for all data types I've tried, and it insures that the keys >> it makes from different types are distinguishable: >> >> e.g. >> >> make_dict_key([(1, 2), (3, 4)]) != make_dict_key({1: 2, 3: 4}) > > Really? It seems to me to be quite easy to get a clash: > >>>> make_dict_key([]) > (<type 'list'>,) >>>> make_dict_key((list,)) > (<type 'list'>,) I should have said "tries to insure". It isn't strictly possible to avoid all clashes, even in principle. For any mutable object M, if make_dict_key (M) returns a key K, then make_dict_key(K) will also return K. However, the clashes are for unusual containers with a type as the first element, instead of "usual" containers containing lists, tuples, strings, etc. Unless you deal with tuples with the first item being a type, you shouldn't come across any clashes. Also: nice work on supporting recursive data structures, thanks. -- Steven.
- Previous message (by thread): How to use list as key of dictionary?
- Next message (by thread): How to use list as key of dictionary?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list