
On Thu, Jul 30, 2020 at 09:35:31PM +0200, Marco Sulla wrote:
On Thu, 30 Jul 2020 at 19:24, Steven D'Aprano <steve@pearwood.info> wrote:
You can't insert a key in a specific position. If I have this dict:
mydict = {'a': 1, 'c': 3, 'd': 4, 'e': 5}
I can't insert 'b':2 between keys 'a' and 'c', except by creating a new dict.
Not sure about this. In C code, dicts are a hashtable and an array of items. In theory, nothing prevents you from inserting a new key in a specific position of the key array instead of at the end.
Of course anything is possible in theory, but I think that would require shifting the existing keys and values in the array, and updating the entries in the hash table to point to their key in the new position, and probably other complications I haven't thought of. Of course it is possible to have a data structure with O(1) insertions and updates by key, and O(1) insertions and updates by index, and fully reorderable keys. But it probably won't be small and lean and fast. Just because something takes constant time doesn't mean it will be a *fast* constant time. In any case, if people want to propose turning dicts into fully-fledged reorderable, slicable sequences as well as mappings, they will probably need a PEP :-) -- Steven