As a programmer, I can tell you that personally for me, building a container class for all input devices is much easier to handle and track input with. By default, the way I designed it allows me to switch what input corresponds to what 'command' (jump, attack, etc) that input triggers in a matter of seconds. All that's needed after that is just throwing in a menu for the player to change those values. Hell, my system allows you to stack as many keyboard, mouse, and gamepad inputs, in any combination or order, onto a command as you want.
Also it took no more than a day to create and debug.