Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

using dict comprehension if/else logic to determine using a function or not

I had a broken function that should either wring all items through a function, or only run items that pass True from a qualifying function, if a qualifying function is given

def transform_dictionary(dictionary, callback, qualification_callback=None):
    return {k: callback(v) if qualification_callback and qualification_callback(v) else v for k, v in dictionary.items()}

It was broke because it required the second function to transform. I now have

def transform_dictionary(dictionary, callback, qualification_callback=None):
    if qualification_callback:
        return {k: callback(v) if qualification_callback(v) else v for k, v in dictionary.items()}
    else:
        return {k: callback(v) for k, v in dictionary.items()}

which is ugly but works. Can I do this in one line, where I either run all values through the callback, or check for truth in the second callback first and only run things that pass? Thank you

like image 480
codyc4321 Avatar asked Jun 05 '26 01:06

codyc4321


1 Answers

v is only returned if there is a qualification callback and it returns False for the given value, so we can check for this condition and either return v if both conditions hold or else return callback(v).

def transform_dictionary(dictionary, callback, qualification_callback=None):
    return {k: v if qualification_callback and not qualification_callback(v) else callback(v) 
            for k, v in dictionary.items()}
like image 127
Alexander Avatar answered Jun 06 '26 15:06

Alexander



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!