Groupement Python clés de dictionnaire sous forme de liste et de créer un nouveau dictionnaire avec cette liste en tant que valeur
J'ai un python dictionnaire
d = {1: 6, 2: 1, 3: 1, 4: 9, 5: 9, 6: 1}
Puisque les valeurs au-dessus du dictionnaire ne sont pas uniques. Je veux du groupe de la toutes les clés de valeurs uniques, comme une liste, et de créer un nouveau dictionnaire comme suit:
v = {6:[1], 1:[2, 3, 6], 9: [4, 5]}
Remarque les clés du nouveau dictionnaire v doivent être triés. Je trouve qu'il est difficile de visualiser et de mettre en œuvre ce dictionnaire de la création. Merci de me suggérer un moyen facile et efficace de le faire.
InformationsquelleAutor Shankar | 2013-04-01
Vous devez vous connecter pour publier un commentaire.
À l'aide de
collections.defaultdict
pour la facilité:mais vous pouvez le faire avec un bog-standard
dict
trop:En Python 3, utilisation
sorted(d.items())
à la place.default_factory
attributNone
. Ensuite, votredefaultdict
va se comporter comme un dict dans presque tous les sens.list
en 2ème ligne? Il semble que cela fonctionne simplement en ayantv = defaultdict()
defaultdict()
prend un usine de la fonction, quelque chose que lorsqu'on l'appelle, produit un nouvel objet à insérer dans le dictionnaire si une touche n'existe pas encore. En passantlist
signifie que chaque fois qu'une touche n'existe pas encore,v[value]
causes de la defaultdict objet à appelerlist()
et insérer le résultat dans le dictionnaire pour la clé. Si vous omettez la fonction de fabrication,defaultdict
agit comme un dictionnaire et soulève unKeyError
pour les touches manquantes.Si vous n'avez pas réellement besoin d'un
dict
à la fin de la journée, vous pouvez utiliseritertools.groupby
:Bien sûr, vous pouvez l'utiliser pour construire un dict si tu voulais vraiment:
Mais à ce stade, vous êtes probablement mieux d'utiliser Martijn de defaultdict solution.
{1: [(1, 6)], 2: [(2, 1)], 3: [(3, 1)], 4: [(4, 9)], 5: [(5, 9)], 6: [(6, 1)]}