Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Are order of keys() and values() in python dictionary guaranteed to be the same? [duplicate]

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.

like image 793
kriss Avatar asked Sep 08 '10 09:09

kriss


People also ask

Are dict keys and dict values in the same order?

Yes, what you observed is indeed a guaranteed property — keys() , values() and items() return lists in congruent order if the dict is not altered.

Does order of keys matter in dictionary Python?

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.

Is Python dictionary order guaranteed?

Dictionary iteration order happens to be in order of insertion in CPython implementation, but it is not a documented guarantee of the language.

Does dict keys return in same order?

Answer. No, there is no guaranteed order for the list of keys returned by the keys() function.


2 Answers

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(), and itervalues() are called with no intervening modifications to the dictionary, the lists will directly correspond.

From the documentation for dict.

like image 52
Dominic Rodger Avatar answered Oct 19 '22 14:10

Dominic Rodger


Python 2.7 and above have ordered dictionaries, for which your statement:

d == dict(zip(d.keys(), d.values()))

would apply

like image 41
Carlos Valiente Avatar answered Oct 19 '22 13:10

Carlos Valiente