Nouvelles fonctionnalités de Python 3.9 (1) -L'opérateur d'ensemble de somme peut être utilisé dans le type de dictionnaire.

introduction

Les nouvelles modifications de Python 3.9 dont la publication est prévue pour octobre 2020 sont résumées dans l'article Quoi de neuf dans Python 3.9 (Résumé) commencé. Parmi eux, j'ai décidé de découper une quantité relativement importante d'éléments dans un article séparé, mais dans un premier temps, j'aimerais reprendre le changement qui permet d'utiliser l'opérateur sum set dans le type dictionnaire.

Intégration de type dictionnaire

Le type de dictionnaire est l'un des types de données standard intégrés à Python. Dans d'autres langages, il est appelé de différentes manières comme type de hachage, type de carte, type de tableau associatif, mais le fait est qu'il s'agit d'un type de données pour stocker des paires nom / valeur (paires clé-valeur).

Considérez qu'il existe deux données de type dictionnaire (d1, d2) et qu'elles sont mélangées en une seule donnée de type dictionnaire. Il existe plusieurs façons de procéder.

1) Utilisez la méthode ʻupdate`

Si vous faites d1.update (d2) `, les données de type dictionnaire intégré seront écrasées et stockées dans d1. Si vous voulez garder d1 tel quel

e = d1.copy()
e.update(d2)

Vous devez faire une copie puis appeler la méthode ʻupdate`. C'est un peu gênant.

2) Sortez le contenu et disposez-le

En tant que «{** d1, ** d2}», les données de contenu sont extraites de chaque type de dictionnaire et renvoyées dans un nouveau type de dictionnaire. Vous pouvez obtenir des données de dictionnaire intégrées sans variables intermédiaires, mais il est difficile de dire ce que vous faites en regardant Pat. Même Guido, l'auteur original de Python, est si déroutant qu'il dit: "J'ai oublié qu'il y avait un tel moyen" (rires).

3) Utilisez collections.ChainMap

Le module collections a une classe appelée ChainMap, et si vous utilisezdict (ChainMap (d2, d1)), vous pouvez obtenir des données de dictionnaire intégrées. La chose déroutante est que, contrairement à l'exemple ci-dessus, si vous avez la même clé, celle de gauche a la priorité. Bien que standard, vous devez importer le module collections, et cette méthode n'est pas non plus très intuitive.

4) Utilisez un constructeur de type dictionnaire

Il y a dict (mapping, ** kwarg) dans le constructeur de type de dictionnaire, donc si vous l'utilisez pour créer dict (d1, ** d2), vous obtiendrez des données de type dictionnaire intégrées. En définissant «** d2», le contenu de «d2» est donné comme arguments de mot-clé et ajouté au contenu du premier argument («d1» ne change pas). Le problème avec cette méthode est que le contenu de d2 est donné comme arguments de mot-clé, donc il ne peut être intégré que si la clé est un type de dictionnaire de chaîne.

Opérateur d'ensemble de somme et type de dictionnaire

Pour les opérateurs utilisés dans le type Set|Quand|=Il y a, par exemple, vous pouvez l'utiliser comme ça.

>>> a = set((1,2,3))
>>> b = set((3,4,5))
>>> a | b
{1,2,3,4,5}
>>> a |= b
>>> a
{1,2,3,4,5}

C'est un opérateur d'ensemble de somme car il calcule la «somme» de deux ensembles. Le changement prévu pour 3.9 cette fois est d'utiliser cet opérateur d'ensemble de somme pour l'intégration des données du dictionnaire.

La spécification est très simple et la somme des deux données de type dictionnaire est prise comme le type Set. La différence avec Set est la correspondance lorsque les clés se chevauchent, et même si l'ensemble se chevauche, il suffit de ne pas compter deux fois, mais dans le cas du type dictionnaire, il y a des valeurs ainsi que des clés, donc laquelle utiliser Devient un problème. Avec ce changement, la valeur sur le côté droit de la formule est priorisée. C'est une image de chevauchement dans l'ordre de gauche et écrasant celle avec la même clé.

C'est plus rapide de le voir comme un exemple.

>>> c = {'a': 1, 'b': 2}
>>> d = {'b': 3, 'c': 7}
>>> c | d
{'a': 1, 'b': 3, 'c': 7}
>>> d | c
{'a': 1, 'b': 2, 'c': 7}
>>> c |= d
>>> c
{'a': 1, 'b': 3, 'c': 7}

Icic | dAvec le résultat ded | cLe fait que le résultat de soit différent (non convertible) est désagréable en tant qu'opérateur "somme", mais vous ne pouvez le considérer que comme tel.

Résumé

J'expliquerai l'opérateur d'ensemble de somme qui sera introduit dans le type de dictionnaire en Python 3.9 basé sur le contenu de PEP-584. J'ai fait. Je pense que j'avais l'habitude d'utiliser dict.update dans de nombreux cas, mais comme il rompt le type de dictionnaire d'origine, je pense qu'il existe diverses utilisations pour dessiner des opérations immuables dans une notation facile à comprendre.

Recommended Posts

Nouvelles fonctionnalités de Python 3.9 (1) -L'opérateur d'ensemble de somme peut être utilisé dans le type de dictionnaire.
Pour pouvoir utiliser le japonais avec Python dans l'environnement Docker
Operators ++, - ne peut pas être utilisé en python (différence de php)
Peut être utilisé chez les pros de la compétition! Bibliothèque standard Python
Scripts pouvant être utilisés lors de l'utilisation de Bottle en Python
Résumé de l'entrée standard de Python pouvant être utilisée dans Competition Pro
Nouvelles fonctionnalités de Python 3.4.0 (3) - Fonctions génériques à distribution unique
J'ai écrit un tri-arbre qui peut être utilisé pour l'implémentation de dictionnaire à grande vitesse en langage D et Python
++ et-ne peuvent pas être utilisés pour incrémenter / décrémenter en python
Types de fichiers pouvant être utilisés avec Go
Fonctions pouvant être utilisées dans l'instruction for
Algorithmes de base utilisables par les pros de la compétition
[Mémorandum] Les clés japonaises ne peuvent pas être utilisées dans la chaîne de python.
Enregistrement d'image ANT qui peut être utilisé en 5 minutes
compréhension de liste car operator.methodcaller ne peut pas être utilisé avec python 2.5
Quoi de neuf dans Python 3.5
Nouveau dans Python 3.4.0 (1) --pathlib
Les équations simultanées non linéaires peuvent être facilement résolues avec Python.
Organiser les types en Python
Quoi de neuf dans Python 3.6
[Redash] La bibliothèque standard ne peut pas être utilisée dans la fonction python
Peut être utilisé avec AtCoder! Une collection de techniques pour dessiner du code court en Python!
[Python3] Code qui peut être utilisé lorsque vous souhaitez redimensionner des images dossier par dossier
[Python] Les arguments de longueur variable peuvent être utilisés lors de la décompression des éléments itérables
Goroutine (contrôle parallèle) utilisable sur le terrain
Goroutine utilisable sur le terrain (édition errgroup.Group)
SSD 1306 OLED peut être utilisé avec Raspeye + python (Remarque)
Un chercheur d'une société pharmaceutique a résumé les opérateurs utilisés en Python
Créer un dictionnaire en Python
Nouveautés de Python 3.10 (Résumé)
Évitez KeyError dans le dictionnaire python
Nouveau dans Python 3.4.0 (2) --enum
Nouveautés de Python 3.9 (Résumé)
Imbrication d'opérateurs ternaires en python
Nouvelle grammaire et fonctionnalités Python non mentionnées dans le livre d'introduction
33 chaînes à ne pas utiliser comme noms de variables en python
Un minuteur (ticker) qui peut être utilisé sur le terrain (peut être utilisé n'importe où)
Enquêter sur ce qui pourrait être utilisé comme analyseur Markdown en Python
[Python] Pourquoi les types int immuables de haze peuvent être modifiés en différentes valeurs
Module standard Python utilisable en ligne de commande
Notes sur Python et les types de dictionnaire
Nouveau dans les dictionnaires de fusion python3.9
8 commandes fréquemment utilisées dans Python Django
[Python] Connaissances de base utilisées dans AtCoder
Remplissage facile des données pouvant être utilisées dans le traitement du langage naturel
J'ai créé un modèle de projet Python générique
Etude depuis le début Heure 6: types de données fréquemment utilisés: type de tapple, type de set, type de dictionnaire
Méthodes gRPC utilisées lors du traitement du type de tampons de protocole dans Python CopyFrom, Extend
Optimisation mathématique pour un travail gratuit avec Python + PuLP