I want _key_order to have the ordering of first insertion.  As it stood, a change to a value would introduce a second copy of a key in this list.  If this setter is being called to change the value of an existing key, it should neither reposition nor duplicate the key within the list.  Its existing position in the ordering is correct.  Your code fragment would move the key to the end of the list when its value is changed.

the other problem with your code fragment is changing the values of a list while you iterate through it.