[Tutor] A sorted dictionary (of sorts)

Roel Schroeven roel at roelschroeven.net
Thu Sep 29 18:17:24 EDT 2022


Ed Connell schreef op 29/09/2022 om 16:29:
> Hi,
>
> The following works fine, but it always made me nervous because
> ordinary dictionaries  are not supposed  to be sorted.  It works (for
> now).  Should I worry that some new version of python will break things?
>
>      # produce a sorted dictionary
>      sorted_names = sorted( Team_Calc_d, key = lambda e: Team_Calc_d[ e
> ].current_power,
>          reverse = True ) # sorted by current power
>      TeamPwrSorted_Result_d = {}
>      for tm in sorted_names:
>          # setup SortTeams_PowerResult_Dict and copy from Analysis objects
>          # to Results objects
>          TeamPwrSorted_Result_d[ tm ] = Results( Team_Basics_d[ tm
> ].start_power )
>          # create the dictionary
>          TeamPwrSorted_Result_d[ tm ].current_power = Team_Calc_d[ tm
> ].current_power
>
>      needs_processing = False # we just updated
>
>      return TeamPwrSorted_Result_d
These days Python dictionaries are ordered (which is not the same as 
sorted), meaning that they preserve the order in which keys were 
inserted. This was already the case in version 3.6 of the CPython 
implementation, but since version 3.7 dictionary order is guaranteed to 
be insertion order in all conforming implementations.

You sort the keys before you insert the items, and you then insert them 
in that order, so everything is fine.

Since that behavior is now guaranteed, you can rely on it. Should it 
ever change, which is very unlikely, there would be a depreciation 
period to give everybody the chance to fix things.

-- 
"The saddest aspect of life right now is that science gathers knowledge
faster than society gathers wisdom."
         -- Isaac Asimov



More information about the Tutor mailing list