[Python-ideas] keyfuncdict -- the good, the bad, and the ugly

Raymond Hettinger raymond.hettinger at gmail.com
Wed Jun 2 20:25:13 CEST 2010

Was thinking of all the things that could be done with Antoine's generalization:

The Good
d = keyfuncdict(key=str.lower)        # case insensitive dict

def track(obj):
    return obj
d = keyfuncdict(key=track)               # monitored dict

d = keyfuncdict(key=id)                          # makes benjamin happy

The Bad

d = keyfuncdict(key=tuple)                    # lets you use lists as keys

d = keyfuncdict(key=repr)                     # support many kinds of mutable or unhashable keys

d = keyfuncdict(key=pickle.loads)       # use anything picklable as a key

d = keyfuncdict(key=getuser)               # track one most recent entry per user

The Ugly

d = keyfuncdict(key=random.random)           # just plain weird

d = keyfuncdict(key=itertools.count().next)   # all entries are unique and unretrievable ;-)

def remove(obj):
     return obj
d = keyfuncdict(key=remove)                          # self deleting dict ;-)


More information about the Python-ideas mailing list