Trier un defaultdict par valeur en python
J'ai une structure de données qui est quelque chose comme ceci:
La population des trois villes différentes de l'année suivante.
Name 1990 2000 2010
A 10 20 30
B 20 30 10
C 30 10 20
Je suis à l'aide d'un defaultdict
pour stocker les données.
from collections import defaultdict
cityPopulation=defaultdict(list)
cityPopulation['A']=[10,20,30]
cityPopulation['B']=[20,30,10]
cityPopulation['C']=[30,10,20]
Je veux trier les defaultdict
basé sur une colonne de la liste (l'année).
Dire, de tri pour l'année 1990, devrait donner C,B,A
, alors que le tri pour l'année 2010 devrait donner A,C,B
.
Aussi, est-ce la meilleure façon de stocker les données? Comme je suis l'évolution de la population des valeurs, je veux qu'il soit mutable.
source d'informationauteur imsc
Vous devez vous connecter pour publier un commentaire.
Note en python 3, vous ne pouvez pas décompresser automatiquement lambda arguments de sorte que vous aurez à changer le code
Un
defaultdict
ne tiennent pas la commande. Vous pourriez avoir besoin d'utiliser unOrderedDict
ou trier les touches à chaque fois qu'une liste.E. g:
Edit: Si vous voulez juste pour imprimer le bon de commande, il suffit d'utiliser la
sorted
builtin:En Python 3.5.
Dire que vous avez ce
defaultdict
:Si vous souhaitez trier sur la base des valeurs, non pas dans les touches, utilisez
u.items()
et mis sur la touche aveclambda(k,v):v
afin qu'il détermine la valeur.Enfin utiliser
reverse=True
si vous voulez que le plus grand nombre de venir en premier:Noter que
key=lambda(k,v): v
est plus clair (pour moi) de direkey=lambda(v): v[1]
: