J'ai une liste de stocks et de positions comme tuples. Positif à acheter, négatif à vendre. Exemple:
result = [('AAPL', 0), ('RY', 57)]
4 Réponses :
Et ça? Vous pouvez lire sur collections.defaultDict code> .
>>> from collections import defaultdict >>> testDict = defaultdict(int) >>> p = [('AAPL', 50), ('AAPL', -50), ('RY', 100), ('RY', -43)] >>> for key, val in p: testDict[key] += val >>> testDict.items() [('AAPL', 0), ('RY', 57)]
Que diriez-vous de cela! Merci beaucoup, travaillé parfaitement et maintenant, j'ai une lecture à faire aussi.
Collections CODE> La bibliothèque est pleine de gemmes. ;)
sans aucune boucle explicite:
Notez que cela ne fonctionnera que si les stocks sont contigus; Vous auriez besoin de trier par le keyfunc autrement. En fait, viens y penser, je pense que cela se lit un peu mieux sans deux cartes: [(k, somme (carte (1), g))) pour K, G en groupeby (P, itemGetter ( 0))] code>.
Voici une solution qui n'implique pas importer: note ceci est pour Python 2.x. Dans 3.x, vous devrez faire: résultat = liste (carte (tuple, d.items ())) code>. P> p>
Je ferais cela en utilisant alors vous pouvez appeler la méthode Si vous avez besoin de trier les tuples par leurs premiers éléments, utilisez collections.Counter code>
: most_common code> de
compteur code> d'objets pour obtenir une liste de tuples triés par Les valeurs en ordre décroissant. p>
triché (c.items ()) code>: p>