В зависимости от того, что вам нужно, вы можете использовать простой обход:
min(orderedDict.values(), key=lambda x: x.age)
Но если вам нужен O (1) способ сделать это, вам нужно создать свой собственный класс, потому что OrderedDict упорядочивает элементы только на основе порядка вставки. Например, вы можете использовать SortedDict из Sorted Containers (или написать свой) и сделать что-то подобное (при условии, что вы все еще хотите иметь возможность получать элементы на основе порядка вставки):
from collections import OrderedDict
from sortedcontainers import SortedDict
class MyOrderedDict(OrderedDict):
def __init__(self):
super(MyOrderedDict, self).__init__(self)
self.sorted = SortedDict()
def __setitem__(self, key, value):
super(MyOrderedDict, self).__setitem__(key, value)
self.sorted[value.age] = value
def __delitem__(self, key):
age = super(MyOrderedDict, self).__getitem__(key).age
super(MyOrderedDict, self).__delitem__(key)
self.sorted.__delitem__(age)
def ageIterator(self):
for age in self.sorted:
yield (age, self.sorted[age])
orderedDict = MyOrderedDict()
#...
for item in orderedDict:
# Items in the order of insertions
for age, item in orderedDict.ageIterator():
# Items by age