Christopher Reimer via Python-list wrote: > Greetings, > > I was playing around this piece of example code (written from memory). > > > def filter_text(key, value): > > def do_nothing(text): return text > > return {'this': call_this, > > 'that': call_that, > > 'what': do_nothing > > }[key](value) > > > Is there a way to refactor the code to have the inner do_nothing > function be the default action for the dictionary?
If it does nothing, why invoke it at all? LOOKUP = {"this": call_this, ...} def filter_text(key, value): if key in LOOKUP: return LOOKUP[key](value) return value If there are much more hits than misses: def filter_text(key, value): try: process = return LOOKUP[key] except KeyError: return value return process(value) If you insist on invoking a noop func: def do_nothing(text): return text def filter_text(key, value): return LOOKUP.get(key, do_nothing)(value) With a collections.defaultdict (will grow to comprise new keys): LOOKUP = defaultdict(LOOKUP, lambda: do_nothing) def filter_key(key, value): return LOOKUP[key](value) > The original code was a series of if statements. The alternatives > include using a lambda to replace the inner function or a try-except > block on the dictionary to return value on KeyError exception. > > What's the most pythonic and fastest? > > Thank you, > > Chris R. > -- https://mail.python.org/mailman/listinfo/python-list