Rebanar una orden de PythonDict

En mi código, frecuentemente necesito tomar un subconjunto de claves + valores de un PythonOrderedDict (decollections paquete). Cortar no funciona (tiraTypeError: unhashable type) y la alternativa, iterar, es engorrosa:

from collections import OrderedDict

o = OrderedDict([('a', 1), ('b', 2), ('c', 3), ('d', 4)])

# want to do:
# x = o[1:3]
# need to do:
x = OrderedDict()
for idx, key in enumerate(o):
    if 1 <= idx < 3:
        x[key] = o[key]

¿Hay una mejor manera de hacer esto?

Respuestas a la pregunta(5)

Su respuesta a la pregunta