For regular dicts I like to use the dict() function because the code is easier to write and read. But OrderedDict() is not equivalent to dict(): In the docstring of collections.OrderedDict it says "keyword arguments are not recommended because their insertion order is arbitrary" (https://github.com/python/cpython/blob/3.6/Lib/collections/__init__.py)
It took me while to realize that. What is the best way to use keywords to create an ordered dict, while maintaining insertion order? Below is OrderedDict.__init__. Would the insertion order be preserved if the last line were to be replaced with: if kwds: for k, v in kwds.items(): self[k] = v if args: self.__update(*args) # no **kwds! ### class OrderedDict(dict): 'Dictionary that remembers insertion order' def __init__(*args, **kwds): '''Initialize an ordered dictionary. The signature is the same as regular dictionaries, but keyword arguments are not recommended because their insertion order is arbitrary. ''' if not args: raise TypeError("descriptor '__init__' of 'OrderedDict' object " "needs an argument") self, *args = args if len(args) > 1: raise TypeError('expected at most 1 arguments, got %d' % len(args)) try: self.__root except AttributeError: self.__hardroot = _Link() self.__root = root = _proxy(self.__hardroot) root.prev = root.next = root self.__map = {} self.__update(*args, **kwds) Thanks! Albert-Jan -- https://mail.python.org/mailman/listinfo/python-list