#define KV(KEY,VALUE) VALUE, KEY
myDict = MD(KV(key,val), KV(key2,val2));
Ugly but a case can be made that this end justifies the means.Another option is implementing your own dictionaryWithObjectsAndKeys where you flip the varargs and feed them back into the subclass dictionaryWithObjectsAndKeys.