Response to a fairly old (April) thread, but there's another use case to **kwargs being collected in an ordered dictionary: interaction with Objective-C or Smalltalk (but mainly obj-c/Cocoa): since **kwargs is not an ordered dict, Python/Cocoa interop can't use them to emulate ObjC's compound message names (as order is significant), so PyObjC merges the message subparts into a single method and tacks the arguments at the end, transforming calls like
[NSString stringWithContentsOfFile:@"/usr/share/dict/propernames" encoding:NSASCIIStringEncoding error:&error];
into
NSString.stringWithContentsOfFile_encoding_error_( "/usr/share/dict/propernames", NSASCIIStringEncoding)
while the verbosity is similar, the loss in readability is tremendous. With the availability of ordered **kwargs, the bridge could simply have a send method (akin to the ObjC performSelector:) taking a bunch of kwargs and sending the corresponding message to the underlying ObjC object:
NSString.send(stringWithContentOfFile="/usr/share/dict/ propernames", encoding=NSASCIIStringEncoding, error=errors)
Or variable method names with a bit of massaging e.g. using the first message part as the method name à la MacRuby:
NSString.stringWithContentOfFile("/usr/share/dict/propernames", encoding=NSASCIIStringEncoding, error=errors)
or splitting that first part between the method name and the first kwarg:
NSString.stringWith(ContentOfFile="/usr/share/dict/propernames", encoding=NSASCIIStringEncoding, error=errors)