Albert-Jan Roskam wrote: > 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?
That's the equivalent to "How can I eat my cake and have it." Once you pass keyword arguments order is inevitably lost $ python3 -c 'f = lambda **kw: list(kw); print(f(a=1, b=2))' ['a', 'b'] $ python3 -c 'f = lambda **kw: list(kw); print(f(a=1, b=2))' ['a', 'b'] $ python3 -c 'f = lambda **kw: list(kw); print(f(a=1, b=2))' ['b', 'a'] in all Python versions prior to 3.6. However, in 3.6 dict keys stay in insertion order, so you don't even need an OrderedDict anymore. Specifically https://docs.python.org/dev/whatsnew/3.6.html """ CPython implementation improvements: ... The order of elements in **kwargs now corresponds to the order in which keyword arguments were passed to the function. """ -- https://mail.python.org/mailman/listinfo/python-list