J'utilise un ordre de commande à un accès aléatoire une liste, mais désormais désormais l'élément Comment Est-ce que je reçois la banane en utilisant juste suivant code> dans la liste de celle que j'ai: foo code> et pomme code>? p> p>
4 Réponses :
Je frémisse de penser à quel point cela sera lent sur une liste de taille, mais le seul em> way je suis arrivé jusqu'à présent ... >>> 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)
retravaillé de votre code, cette façon je suppose que ce serait un peu mieux: ayant essentiellement un itérateur au bon endroit est déjà suffisant. p> serait cool Pour commencer l'itération de n'importe quelle position, mais pas sûr de si possible. A besoin d'une pensée. P> p>
Si vous allez bien d'accéder à ces parties de la mise en œuvre de commande ordonnée qui sont intentionnellement conservées privées:
Plus que d'accord, c'est la perspicacité que j'espérais.
En Python 3.4, la mise en œuvre de ordonnéDdict code> légèrement modifié (voir ici ). Les éléments de la liste liée sont maintenant des objets de la classe factice _LINK code>. Au lieu d'accéder à Self._OrderedDict__Map [clé] [1] code>, il faut accéder à auto._OrderedDict__map [clé] .nsext code>.
Dans Python3.5, des choses semblent avoir encore plus changées. La mise en œuvre de CommandedDict est déplacée sur C de Python. Cochez [ bugs.python.org/issue16991] . Cette mise en œuvre n'autorisera pas _map I.e. _OrderedDict__Map__Map d'être héritée. Si vous devriez contourner cela et utiliser le module Python, vous pouvez essayer d'utiliser py_coll = import_fresh_module ('Collections', bloqué = ['_ Collections']) CommandedDict = py_coll.ordereddict code>
Pourquoi cela n'est-il pas implémenté dans l'interface pour commanderddict? Cela semble être un cas d'utilisation aussi évident pour un ordonnance de commande qu'il est surprenant qu'ils ne viennent pas avec des moyens plus simples de naviguer que d'itération de l'ensemble de la commande de notre code. Se demandant quel est le raisonnement derrière cela pourrait être.
Python 3.x
dict.items retournerait un objet de vision de dict itérable plutôt qu'une liste. Nous devons envelopper l'appel sur une liste afin de rendre l'indexation possible: p>
CommandéDict code> semble être trop simple pour cela. Peut-être qu'un horrible one-liner fonctionnerait?FOO [(touches Lambda: clés [(Keys.index ('' Pear ') + 1)% Len (touches)]) (Foo.keys ())] code>