9
votes

Comment résumer les tuples dans une liste où la première valeur est la même?

J'ai une liste de stocks et de positions comme tuples. Positif à acheter, négatif à vendre. Exemple:

result = [('AAPL', 0), ('RY', 57)]


0 commentaires

4 Réponses :


15
votes

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)]


2 commentaires

Que diriez-vous de cela! Merci beaucoup, travaillé parfaitement et maintenant, j'ai une lecture à faire aussi.


Collections La bibliothèque est pleine de gemmes. ;)



0
votes

sans aucune boucle explicite: xxx


1 commentaires

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))] .



2
votes

Voici une solution qui n'implique pas importer: xxx

note ceci est pour Python 2.x. Dans 3.x, vous devrez faire: résultat = liste (carte (tuple, d.items ())) .


0 commentaires

2
votes

Je ferais cela en utilisant collections.Counter : xxx

alors vous pouvez appeler la méthode most_common de compteur d'objets pour obtenir une liste de tuples triés par Les valeurs en ordre décroissant. xxx

Si vous avez besoin de trier les tuples par leurs premiers éléments, utilisez triché (c.items ()) : xxx


0 commentaires