python_koans icon indicating copy to clipboard operation
python_koans copied to clipboard

test_dictionary_is_unordered in about_dictionaries.py doesn't test what it says it tests

Open jpretori opened this issue 4 years ago • 3 comments

I'm using Python 3.8.5.

According to official Python docs (https://docs.python.org/3.8/library/stdtypes.html#mapping-types-dict):

Changed in version 3.7: Dictionary order is guaranteed to be insertion order. This behavior was an implementation detail of CPython from 3.6.

So technically, in test_dictionary_is_unordered(), dict1 == dict2 should always return False. It doesn't for some reason I can't seem to work out.

Playing around with the Python console:

>>> d1
{1: 1, 2: 2, 3: 3}
>>> d2
{2: 2, 1: 1, 3: 3}
>>> d1 == d2
True
>>> l1
[1, 2, 3]
>>> l2
[2, 1, 3]
>>> l1 == l2
False

I guess maybe this means that == means something slightly different for dict than I expected?

jpretori avatar Jul 25 '21 13:07 jpretori

I guess maybe this means that == means something slightly different for dict than I expected?

This is what is said in the official docs: https://docs.python.org/3.8/library/stdtypes.html#mapping-types-dict

Dictionaries compare equal if and only if they have the same (key, value) pairs (regardless of ordering). Order comparisons (‘<’, ‘<=’, ‘>=’, ‘>’) raise TypeError

So it should behave differently than in lists where order matters.

programmer-ke avatar Apr 05 '22 09:04 programmer-ke

I think the case may be Since there is no index in dictionary introduces then whats the point of comparing the elements in index way, the order preservence was just to make retrival easy

warriorwizard avatar Jul 23 '22 00:07 warriorwizard

We could compare the enumerate of both dicts to solve the issue. Since it will return a list of tuples and would check as a list. Would be happy to work on this. Not sure who to tag to be assigned to this issue.

image

HeavenEvolved avatar Mar 16 '23 07:03 HeavenEvolved