Остальные ответы верны; это невозможно, но вы можете написать это сами. Однако, в случае, если вы не знаете, как на самом деле реализовать что-то подобное, вот полная и работающая реализация, которая диктует подклассы, которые я только что написал и протестировал. (Обратите внимание, что порядок значений, передаваемых в конструктор, не определен, но он будет предшествовать значениям, переданным позже, и вы всегда можете просто не допустить, чтобы упорядоченные диктовки инициализировались значениями.)
class ordered_dict(dict):
def __init__(self, *args, **kwargs):
dict.__init__(self, *args, **kwargs)
self._order = self.keys()
def __setitem__(self, key, value):
dict.__setitem__(self, key, value)
if key in self._order:
self._order.remove(key)
self._order.append(key)
def __delitem__(self, key):
dict.__delitem__(self, key)
self._order.remove(key)
def order(self):
return self._order[:]
def ordered_items(self):
return [(key,self[key]) for key in self._order]
od = ordered_dict()
od["hello"] = "world"
od["goodbye"] = "cruel world"
print od.order() # prints ['hello', 'goodbye']
del od["hello"]
od["monty"] = "python"
print od.order() # prints ['goodbye', 'monty']
od["hello"] = "kitty"
print od.order() # prints ['goodbye', 'monty', 'hello']
print od.ordered_items()
# prints [('goodbye','cruel world'), ('monty','python'), ('hello','kitty')]