12
votes

Comment obtenir le "prochain" article dans un ordre de commande?

J'utilise un ordre de commande à un accès aléatoire une liste, mais désormais désormais l'élément suivant dans la liste de celle que j'ai: xxx

Comment Est-ce que je reçois la banane en utilisant juste foo et pomme ?


1 commentaires

CommandéDict 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 ())]


4 Réponses :


6
votes

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)


0 commentaires

1
votes

retravaillé de votre code, cette façon je suppose que ce serait un peu mieux: xxx

ayant essentiellement un itérateur au bon endroit est déjà suffisant.

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.


0 commentaires

8
votes

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: xxx


4 commentaires

Plus que d'accord, c'est la perspicacité que j'espérais.


En Python 3.4, la mise en œuvre de ordonnéDdict légèrement modifié (voir ici ). Les éléments de la liste liée sont maintenant des objets de la classe factice _LINK . Au lieu d'accéder à Self._OrderedDict__Map [clé] [1] , il faut accéder à auto._OrderedDict__map [clé] .nsext .


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


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.



1
votes

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: xxx


0 commentaires