What I typically do in this case is something like this:
#define KEY1 (1<<0)
#define KEY2 (1<<1)
...
#defiine KEYs (KEY1 | KEY2 | ...)
switch ((~key_read()) & KEYs) {
case KEY1: //do something
case KEY2: //do something else
}
...
It is easier to read and to maintain, but it is slower - which usually isn't important for human interactions.