вот, собственно, самокат
а вот как бы пример:
X = xOrderedDict(('a', 1), ('b', 2), ('c', 3), ('d', 4)) print X # xOrderedDict([('a', 1), ('b', 2), ('c', 3), ('d', 4)]) del X['c'] print X # xOrderedDict([('a', 1), ('b', 2), ('d', 4)]) del X[('a', 'b')] print X # xOrderedDict([('d', 4)]) X.insert([0], ('a', 1)) X.insert([-1], ('b', 2), ('c', 3)) X.insert('b', ('e', 4)) # xOrderedDict([('a', 1), ('d', 4), ('e', 4), ('b', 2), ('c', 3)]) # X.insert([0], ('a', 1)) # KeyError: "Duplicate key(s): ['a']" print X X.move([-1], 'e', 'a') # xOrderedDict([('d', 4), ('b', 2), ('c', 3), ('e', 4), ('a', 1)]) print X print X.keyof(2), X.keyof(-1), X.indexof('a'), X.indexof('z', 100500) # c a 4 100500 import pickle, StringIO s = StringIO.StringIO() pickle.dump(X, s) Y = pickle.load(StringIO.StringIO(s.getvalue())) print X==Y, Y # True xOrderedDict([('d', 4), ('b', 2), ('c', 3), ('e', 4), ('a', 1)]) Y.move([0], 'a') print X==Y # False