Reputation: 112
I've been toying with using a dictionary to replace a switch case in python. I have the following dictionary:
dispatcher = {"avg": data_filler.fill_missing_data_average,
"value": data_filler.fill_missing_data,
"drop": data_filler.drop_column}
Where fill_missing_data_average, fill_missing_data, and drop_column are all functions. I am then calling these functions in the following way:
for col in self.to_do_list:
self.pandas_dataset[col] = dispatcher[self.to_do_list[col]]()
Now, something should go in the () after the dispatcher call. But while fill_missing_data_average and drop_column both take a only a pandas dataframe as an argument, fill_missing_data takes both a pandas dataframe and a numerical value.
Is there a way to still use this method with functions that take a different number of parameters?
Upvotes: 1
Views: 1132
Reputation: 238517
If you can modify the dispacher dict, you could wrap your your function referneces to lambdas. Its one way of doing this. Here is some example:
def fill_missing_data_average(a):
print(a)
def fill_missing_data(a, b):
print(a, b)
def drop_column(a):
print(a)
dispatcher = {"avg": lambda a,_: fill_missing_data_average(a),
"value": lambda a,b: fill_missing_data(a,b),
"drop": lambda a,_: drop_column(a)}
dispatcher["avg"](1,2)
dispatcher["value"](1,2)
dispatcher["drop"](1,2)
This will print:
1
1 2
1
Upvotes: 3