So, first I thought it was zip that was causing it. However it is not zip since when I enter
>>zip(('a','b','c','d','e'),(1,2,3,4,5)
The output is from left to right
[('a', 1), ('b', 2), ('c', 3), ('d', 4), ('e', 5)]
So I considered maybe it has to do with memory storage between our systems (I'm using windows10). I checked with the same input and got the same output
>>dict_a = dict(zip(('a','b','c','d','e'),(1,2,3,4,5)))
{'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4}
Now, I checked the documentation at python built-in types. Their code is more what you'd expect where
>>c = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
has the output from right to left, (which I'm guessing after zipping the two lists the dictionary adds from popping values and using the update function).
>>{'three': 3, 'two': 2, 'one': 1}
No matter how you put in the different dictionaries it still has the same output (dictionaries like sets as OP states order does not matter).
>>d = dict([('two', 2), ('one', 1), ('three', 3)])
{'three': 3, 'two': 2, 'one': 1}
The python manual states for built in types
If keyword arguments are given, the keyword arguments and their values are added to the dictionary created from the positional argument
Given that the key arugments don't change even with or without changing zip I tried one last thing. I decided to switch the keys and items
>>d = dict([(1,'a'), (2,'b'),(3,'c'),(4,'d'),(5,'e')])
Which outputted what we expected
{1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'}
Ordered by numbers. My only explanation is that during the actual compiling the letters 'a','b','c','d','e' are being stored as another form (e.g. hexadecimal not ascii) which would change the order of a,b,c,d,e in the list that is used for keys in the dictionary.