Python 3.9 est sorti le 5 octobre 2020. L'une des nouvelles fonctionnalités cette fois-ci est l'opérateur de fusion dict. Cet opérateur de fusion facilite plus que jamais la fusion de dictionnaires.
Vous pouvez exécuter Python 3.9 sur un conteneur Docker en suivant les étapes ci-dessous. Les étapes suivantes fonctionnent sur le conteneur Docker afin que vous puissiez valider Python 3.9 sans mettre à jour la version hôte de Python.
$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: #Entrez votre nom d'utilisateur Docker Hub ici et appuyez sur Entrée
Password: #Entrez le mot de passe du hub docker ici et appuyez sur Entrée
Si l'écran suivant apparaît, la connexion est réussie
Login Succeeded
$ docker pull python:3.9
3.9: Pulling from library/python
e4c3d3e4f7b0: Pull complete
101c41d0463b: Pull complete
8275efcd805f: Pull complete
751620502a7a: Pull complete
0a5e725150a2: Pull complete
397dba5694db: Pull complete
b1d09d0eabcb: Pull complete
475299e7c7f3: Pull complete
d2fe14d8e6bc: Pull complete
Digest: sha256:429b2fd1f6657e4176d81815dc9e66477d74f8cbf986883c024c9b97f7d4d5a6
Status: Downloaded newer image for python:3.9
docker.io/library/python:3.9
$ docker run -it python:3.9 python3
Python 3.9.0 (default, Oct 13 2020, 20:14:06) # ←Python3.9 est en cours d'exécution
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
Prenons le cas de la combinaison de deux dictionnaires pour en faire un seul.
>> dict_1 = {"name": "Alice", "age": 29}
>> dict_2 = {"mail": "[email protected]", "tel": "000-0000-0000"}
#Combinez les deux dictionnaires ci-dessus pour créer le dict suivant
dict_3 = {'name': 'Alice', 'age': 29, 'mail': '[email protected]', 'tel': '000-0000-0000'}
En Python traditionnel, parcourir les éléments dict et attribuer les éléments dict_2 à dict_1 un par un.
>> dict_3 = dict_1.copy() # dict_3 = dict_1 est dict_Notez que 1 est également réécrit
>>> for key, value in dict_2.items():
... dict_3[key] = value
...
>>> dict_3
{'name': 'Alice', 'age': 29, 'mail': '[email protected]', 'tel': '000-0000-0000'}
>>> dict_1
{'name': 'Alice', 'age': 29} #Dict après la fusion_1 ne change pas
>>> dict_2
{'mail': '[email protected]', 'tel': '000-0000-0000'} #Dict après la fusion_2 ne change pas
Dans Python 3.9, le processus ci-dessus est effectué uniquement par l'opérateur de fusion.
>>> dict_3 = dict_1 | dict_2 # |Est l'opérateur de fusion
>>> dict_3
{'name': 'Alice', 'age': 29, 'mail': '[email protected]', 'tel': '000-0000-0000'}
En utilisant l'opérateur de fusion, le processus de fusion de dict_1 et dict_2 peut être décrit en une seule ligne. Si la même clé existe dans deux dictionnaires, la valeur fusionnée sera sur le côté droit (dernière victoire).
>>> dict_1 = {"name": "Alice", "age": "29"}
>>> dict_2 = {"mail": "[email protected]", "tel": "000-0000-0000", "age": 30} # "age"Est dict_1 et dict_Inclus dans les deux 2
>>> dict_1 | dict_2
{'name': 'Alice', 'age': 30, 'mail': '[email protected]', 'tel': '000-0000-0000'} #l'âge est dict_C'est devenu 2
>>> dict_1 = {"name": "Alice", "age": "29"}
>>> dict_2 = {"mail": "[email protected]", "tel": "000-0000-0000", "age": None}
>>> dict_1 | dict_2
{'name': 'Alice', 'age': None, 'mail': '[email protected]', 'tel': '000-0000-0000'} #Notez que même si la valeur à droite est None, elle sera incluse dans le dictionnaire fusionné.(Pas la valeur sur le côté gauche)
Comme avec d'autres opérateurs tels que + et-, vous pouvez affecter le dict fusionné au côté gauche en ajoutant =.
>>> dict_1 = {"name": "Alice", "age": 29}
>>> dict_2 = {"mail": "[email protected]", "tel": "000-0000-0000"}
>>> id(dict_1), id(dict_2)
(140606638257856, 140606638701760)
>>> dict_1 |= dict_2 # dict_1 et dict_Dicter le résultat de la fusion 2_Remplacer par 1
>>> dict_1
{'name': 'Alice', 'age': 29, 'mail': '[email protected]', 'tel': '000-0000-0000'} # dict_1 est réécrit
>>> dict_2
{'mail': '[email protected]', 'tel': '000-0000-0000'} # dict_2 ne change pas
>>> id(dict_1), id(dict_2)
(140606638257856, 140606638701760) #id est le même avant et après le calcul
L'opérateur de fusion peut également être utilisé pour OrderedDict.
>>> from collections import OrderedDict
>>> o_dict_1 = OrderedDict({'name': 'Alice', 'age': 29})
>>> o_dict_2 = OrderedDict({'mail': '[email protected]', 'tel': '000-0000-0000'})
>>> o_dict_1
OrderedDict([('name', 'Alice'), ('age', 29)])
>>> o_dict_1 | o_dict_2
OrderedDict([('name', 'Alice'), ('age', 29), ('mail', '[email protected]'), ('tel', '000-0000-0000')])
S'il y a une clé commune aux côtés gauche et droit, l'ordre sera le côté gauche et la valeur sera le côté droit. Les clés contenues uniquement sur le côté droit sont ajoutées à la fin dans l'ordre du côté droit.
>>> from collections import OrderedDict
>>> o_dict_1 = OrderedDict({'name': 'Alice', 'age': 29})
>>> o_dict_2 = OrderedDict({'mail': '[email protected]', 'age': 30, 'name': 'Bob', 'tel': '000-0000-0000'})
>>> o_dict_1 | o_dict_2
OrderedDict([('name', 'Bob'), ('age', 30), ('mail', '[email protected]'), ('tel', '000-0000-0000')])
# age,le nom est o_dict_O dans l'ordre de 1_dict_Ils sont alignés avec une valeur de 2.
# dict_Courrier inclus uniquement dans 2,tel est o_dict_Ajouté à la fin dans l'ordre de 2
Recommended Posts