Mailing List Archive

Testing list sequence question
Hi guys,

I have a strange problem that I do not understand. I am testing function
which returns a dictionary. The code should ensure that the keys of the
dictionary are generated in a given order.

I am testing the function with the standard unittest module and use the
assertListEqual statement to verify the sequence. Sometimes this test
fails, sometimes passes without any change neither in the code, nor in the
testcase. I am using "list(myDict.keys())" to create the list of the keys
of the dictionary.

I am running Python 3.3 on MS Windows. Any idea why is this?

Thx, Gabor

--
Urbán Gábor

Linux is like a wigwam: no Gates, no Windows and an Apache inside.
--
https://mail.python.org/mailman/listinfo/python-list
Re: Testing list sequence question [ In reply to ]
Gabor Urban schreef op 4/03/2023 om 17:38:
> Hi guys,
>
> I have a strange problem that I do not understand. I am testing function
> which returns a dictionary. The code should ensure that the keys of the
> dictionary are generated in a given order.
>
> I am testing the function with the standard unittest module and use the
> assertListEqual statement to verify the sequence. Sometimes this test
> fails, sometimes passes without any change neither in the code, nor in the
> testcase. I am using "list(myDict.keys())" to create the list of the keys
> of the dictionary.
>
> I am running Python 3.3 on MS Windows. Any idea why is this?
Prior to Python 3.6 (de facto) and Python 3.7 (officially), there was no
guarantee at all about the order of keys in a dict. If you need the keys
to be in the same order they were inserted, either use
collections.OrderedDict or upgrade to Python 3.7 or later.

--
"Life ain't no fairy tale
Just give me another ale
And I'll drink to Rock 'n Roll"
-- Barkeep (The Scabs)

--
https://mail.python.org/mailman/listinfo/python-list
Re: Testing list sequence question [ In reply to ]
On 3/4/2023 11:38 AM, Gabor Urban wrote:
> Hi guys,
>
> I have a strange problem that I do not understand. I am testing function
> which returns a dictionary. The code should ensure that the keys of the
> dictionary are generated in a given order.
>
> I am testing the function with the standard unittest module and use the
> assertListEqual statement to verify the sequence. Sometimes this test
> fails, sometimes passes without any change neither in the code, nor in the
> testcase. I am using "list(myDict.keys())" to create the list of the keys
> of the dictionary.
>
> I am running Python 3.3 on MS Windows. Any idea why is this?

List order would not be guaranteed. Sort the list first. Then your
problem should clear up.

--
https://mail.python.org/mailman/listinfo/python-list
Re: Testing list sequence question [ In reply to ]
Thomas Passin schreef op 4/03/2023 om 18:49:
> On 3/4/2023 11:38 AM, Gabor Urban wrote:
> > Hi guys,
> >
> > I have a strange problem that I do not understand. I am testing function
> > which returns a dictionary. The code should ensure that the keys of the
> > dictionary are generated in a given order.
> >
> > I am testing the function with the standard unittest module and use the
> > assertListEqual statement to verify the sequence. Sometimes this test
> > fails, sometimes passes without any change neither in the code, nor in the
> > testcase. I am using "list(myDict.keys())" to create the list of the keys
> > of the dictionary.
> >
> > I am running Python 3.3 on MS Windows. Any idea why is this?
>
> List order would not be guaranteed. Sort the list first. Then your
> problem should clear up.
How would that enable you to check that the keys in the dict are in a
specific order?

--
"Ever since I learned about confirmation bias, I've been seeing
it everywhere."
-- Jon Ronson

--
https://mail.python.org/mailman/listinfo/python-list
Re: Testing list sequence question [ In reply to ]
On Sun, 5 Mar 2023 at 05:44, Roel Schroeven <roel@roelschroeven.net> wrote:
>
> Thomas Passin schreef op 4/03/2023 om 18:49:
> > On 3/4/2023 11:38 AM, Gabor Urban wrote:
> > > Hi guys,
> > >
> > > I have a strange problem that I do not understand. I am testing function
> > > which returns a dictionary. The code should ensure that the keys of the
> > > dictionary are generated in a given order.
> > >
> > > I am testing the function with the standard unittest module and use the
> > > assertListEqual statement to verify the sequence. Sometimes this test
> > > fails, sometimes passes without any change neither in the code, nor in the
> > > testcase. I am using "list(myDict.keys())" to create the list of the keys
> > > of the dictionary.
> > >
> > > I am running Python 3.3 on MS Windows. Any idea why is this?
> >
> > List order would not be guaranteed. Sort the list first. Then your
> > problem should clear up.
> How would that enable you to check that the keys in the dict are in a
> specific order?
>

In Python 3.3, the keys in a dict are not in a specific order. There
is nothing to test.

ChrisA
--
https://mail.python.org/mailman/listinfo/python-list
Re: Testing list sequence question [ In reply to ]
On 3/4/2023 1:42 PM, Roel Schroeven wrote:
> Thomas Passin schreef op 4/03/2023 om 18:49:
>> On 3/4/2023 11:38 AM, Gabor Urban wrote:
>> >   Hi guys,
>> > > I have a strange problem that I do not understand. I am testing
>> function
>> > which returns a dictionary. The code should ensure that the keys of the
>> > dictionary are generated in a given order.
>> > > I am testing the function with the standard unittest module and
>> use the
>> > assertListEqual statement to verify the sequence. Sometimes this test
>> > fails, sometimes passes without any change neither in the code, nor
>> in the
>> > testcase. I am using "list(myDict.keys())" to create the list of the
>> keys
>> > of the dictionary.
>> > > I am running Python 3.3 on MS Windows. Any idea why is this?
>>
>> List order would not be guaranteed.  Sort the list first.  Then your
>> problem should clear up.
> How would that enable you to check that the keys in the dict are in a
> specific order?

I probably misunderstood. I thought you needed a list of keys in a
reproducible order, which sorting the list would achieve.

Let's back up. Why do you care about having the keys in some particular
order? And what is that order? Perhaps some other code design will
satisfy the real purpose.

Otherwise, in Python 3.7 and up dicts maintain the insertion order of
the keys. If you cannot use those versions of Python for some reason,
here's a python 2.7-compatible backport of an ordered dictionary that
you could probably adapt:

https://code.activestate.com/recipes/576693/

But note: "Dictionaries compare equal if and only if they have the same
(key, value) pairs (regardless of ordering)" (from the Python docs).

If the order you want is not the original insertion order, then you will
perhaps need to adapt the ordered dict idea to your needs.

--
https://mail.python.org/mailman/listinfo/python-list