mi vengono i brividi a pensare quanto lento questo sarà su un elenco di dimensioni, ma l'unica modo in cui mi è venuta in mente finora ...
>>> foo.items()[foo.keys().index('apple') + 1]
('banana', 3)
Edit:
Il l'esempio era leggermente inventato; la mia collezione attuale è composta da date. Se ho bisogno della voce dopo today
; trovato una soluzione utilizzando dropwhile ...
>>> foo = OrderedDict([(datetime.date(2000,1,1), 4), (datetime.date(2000,5,23), 3), datetime.date(2000,10,1), 2), (datetime.date(2000,12,31), 1)])
>>> today = datetime.date(2000,1,30)
>>> foo.items()[foo.keys().index((itertools.dropwhile(lambda d: d<today, foo)).next())]
(datetime.date(2000, 5, 23), 3)
Piuttosto un boccone.
fonte
2012-09-08 05:19:19
'OrderedDict' sembra essere troppo semplice per questo. Forse un orribile one-liner avrebbe funzionato? 'foo [(lambda keys: keys [(keys.index ('pear') + 1)% len (keys)]) (foo.keys())]' – Blender