Does native built-in python dict guarantee that the keys()
and values()
lists are ordered in the same way?
d = {'A':1, 'B':2, 'C':3, 'D':4 } # or any other content
otherd = dict(zip(d.keys(), d.values()))
Do I always have d == otherd
?
Either it's true or false, I'm interested in any reference pointer on the subject.
PS: I understand the above property will not be true for every objects that behave like a dictionary, I just wonder for the built-in dict. When I test it looks as if it's true, and it's no surprise because having the same order for keys()
and values()
is probably the simplest implementation anyway. But I wonder if this behavior was explicitly defined or not.
Yes, what you observed is indeed a guaranteed property — keys() , values() and items() return lists in congruent order if the dict is not altered.
Since dictionaries in Python 3.5 don't remember the order of their items, you don't know the order in the resulting ordered dictionary until the object is created. From this point on, the order is maintained. Since Python 3.6, functions retain the order of keyword arguments passed in a call.
Dictionary iteration order happens to be in order of insertion in CPython implementation, but it is not a documented guarantee of the language.
Answer. No, there is no guaranteed order for the list of keys returned by the keys() function.
Keys and values are listed in an arbitrary order which is non-random, varies across Python implementations, and depends on the dictionary's history of insertions and deletions. If
items()
,keys()
,values()
,iteritems()
,iterkeys()
, anditervalues()
are called with no intervening modifications to the dictionary, the lists will directly correspond.
From the documentation for dict
.
Python 2.7 and above have ordered dictionaries, for which your statement:
d == dict(zip(d.keys(), d.values()))
would apply
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With