J'écris du code qui me demande d'extraire la limite inférieure d'une touche (pour la simplicité, ignore les touches qui se trouvent sous la plus petite touche de la collection).
en C ++, à l'aide de STD :: Carte (en tant que Type de données le plus comparable) Je voudrais simplement utiliser le plus bas_bound () pour renvoyer l'itérateur. P>
My Pythonfoo n'est pas si génial, mais je devine que (au cas où Python n'a pas encore de moyen de faire cela ), ce serait une bonne utilisation d'une fonction Lambda ... p>
Quelle est la manière pythononique de récupérer la touche liée inférieure pour un indice donné? P>
Si la question est Trop abstrait, c'est ce que j'essaie réellement de faire: P>
J'ai un dict python indexé par la date. Je souhaite pouvoir utiliser une date pour rechercher la dicte et renvoyer la valeur associée au plus bas de la clé spécifiée. P>
Snippet suit: P>
mymap = { datetime.date(2007, 1, 5): 'foo', datetime.date(2007, 1, 10): 'foofoo', datetime.date(2007, 2, 2): 'foobar', datetime.date(2007, 2, 7): 'foobarbar' } mydate = datetime.date(2007, 1, 7) # fetch lbound key for mydate from mymap def mymap_lbound_key(orig): pass # return the lbound for the key
4 Réponses :
Vous n'êtes toujours pas sûr de ce que la "Baisse inférieure" est la suivante: la dernière date avant / après la date de requête? p>
Quoi qu'il en soit depuis qu'un dict n'impose pas un ordre inhérent sur ses clés, vous avez besoin d'une structure différente. Stockez vos clés dans une structure qui les maintient triés et permet des recherches rapides. P>
La solution la plus simple serait de stocker simplement les dates triées em> dans une liste de (date, valeur) et faire une recherche binaire pour zoomer sur la région souhaitée. Si vous avez besoin / vouloir de meilleures performances, je pense qu'un arbre B est ce dont vous avez besoin. P>
La classe dict code> de Python n'a pas cette fonctionnalité; Vous auriez besoin de l'écrire vous-même. Il serait bien pratique si les clés étaient déjà triées, n'est-ce pas, alors vous pourriez faire une recherche binaire sur eux et éviter de les itérations sur eux? Dans cette veine, j'aurais consulté la classe code> classement code> dans le fichier code> blist code>. http://pypi.python.org/pypi/blist/ P>
Si vous avez de la sorte surchargé de la sorte, il peut comparer les choses à regarder dans le Module de bidissure .
Un exemple de codage entier minimal: p>
Quand je veux quelque chose qui ressemble à une carte C ++, j'utilise SoyedDict. Vous pouvez utiliser Code: p> sortie: p> irrange code> pour obtenir un itérateur à une clé pour laquelle une clé donnée est une limite inférieure - que je pense est comment
std :: inférieur code> fonctionne.