Python: comment découper un dictionnaire basé sur les valeurs de ses clés?
Dire que j'ai un dictionnaire construit comme ceci:
d={0:1, 1:2, 2:3, 10:4, 11:5, 12:6, 100:7, 101:8, 102:9, 200:10, 201:11, 202:12}
et je veux créer un subdictionary d1
par tranchage de d
de telle manière que d1
contient les touches suivantes: 0, 1, 2, 100, 101, 102
. Le résultat final devrait être:
d1={0:1, 1:2, 2:3, 100:7, 101:8, 102:9}
Est-il efficace Pythonic façon de le faire, étant donné que ma véritable dictionnaire contient plus de 2 000 000 d'articles?
Je pense que cette question s'applique à tous les cas où les clés sont des entiers, lorsque le découpage doit suivre certaines l'inégalité des règles, et quand le résultat final doit être un tas de tranches de rassembler dans le même dictionnaire.
{k: d[k] for k in [0, 1, ...]}
?Dans mon cas, toutes les touches ont des valeurs.
Vous ne pouvez pas vraiment "tranche" d'un dictionnaire, puisque c'est une mutable cartographie et pas une séquence. Je pense que dict compréhension est votre meilleur pari.
Le découpage d'un dictionnaire n'est pas intrinsèquement impossible; Python n'a pas de syntaxe pour le faire, comme, par exemple, Perl n' (bien qu'en Perl, vous venez de récupérer les valeurs correspondantes, pas un sous-ensemble de la table de hachage).
OriginalL'auteur FaCoffee | 2016-11-05
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le dictionnaire de compréhension avec:
En python 2.7, vous pouvez également calculer des clés (en python 3.x remplacez
it.ifilter(...)
parfilter(...)
):Quel est la définition de l'inégalité de la règle? Merci de partager l'info complète, nous ne pouvons pas lire dans votre esprit 🙂
Une définition pourrait être de "projet" de toutes les valeurs clés qui sont supérieures et inférieures à une certaine valeur
x
. Exemple:06010001 < x <= 06012000
.voir ma réponse mis à jour. Avec python 3.x vous avez juste à le remplacer.filtre de(...) par le filtre(...)
OriginalL'auteur Olivier Pellier-Cuit
Une manière succincte de la création de la sous-dictionnaire est d'utiliser
operator.itemgetter
. Cette fonction prend plusieurs arguments et retourne une nouvelle fonction pour renvoyer un tuple contenant les éléments correspondants d'un objet iterable.OriginalL'auteur chepner