Méthode Python et analyse de la fusion de plusieurs mappages en un seul mappage (exemple de code)

不言
Libérer: 2018-11-26 16:39:49
avant
2157 Les gens l'ont consulté

Le contenu de cet article concerne la méthode et l'analyse (exemples de code) de fusion de plusieurs mappages en un seul mappage en Python. Il a une certaine valeur de référence. Les amis dans le besoin pourront s'y référer. vous avez aidé.

1. Exigences

Nous avons plusieurs dictionnaires ou mappages et souhaitons les fusionner logiquement en une seule structure de mappage pour effectuer certaines opérations spécifiques, telles que la recherche augmenter une valeur ou vérifier si une clé existe.

2. Solution

Supposons qu'il y ait deux dictionnaires :

a={'x':1,'z':3}
b={'y':2,'z':4}
Copier après la connexion

Supposons maintenant que nous voulions effectuer une opération de recherche, nous devons les vérifier deux dictionnaires (par exemple, recherchez dans un premier, et s'il n'est pas trouvé, recherchez dans b). Un moyen simple consiste à utiliser la classe ChainMap dans le module collections pour résoudre ce problème. Par exemple :

from collections import ChainMap
a={'x':1,'z':3}
b={'y':2,'z':4}
c=ChainMap(a,b)
print(c['x'])
print(c['y'])
print(c['z'])
print(len(c))
print(list(c.keys()))
print(list(c.values()))
a['z']=5
print(c['z'])
Copier après la connexion

Résultat d'exécution :

1
2
3
3
['y', 'z', 'x']
[2, 3, 1]
5
Copier après la connexion

3 Analyse

ChainMap peut accepter plusieurs mappages et les gérer logiquement. Apparaît comme. un mécanisme de cartographie distinct. Cependant, ces mappages ne sont pas fusionnés au moment de l’exécution. Au lieu de cela, ChainMap conserve simplement une liste enregistrant les relations de mappage sous-jacentes, puis redéfinit les opérations courantes du dictionnaire pour analyser cette liste. La plupart des opérations de liste fonctionnent correctement. Par exemple : len, clés(), valeurs().

S'il y a des clés en double, la valeur correspondante dans la première carte sera utilisée.

Les opérations qui modifient un mappage agissent toujours sur la première structure de mappage répertoriée. Par exemple :

del c['x'] #可以正常删除a中的'x':1
del c['y'] #会移除,因为第一个映射结构a中没有y键
Copier après la connexion

Comme alternative à ChainMap, nous pouvons envisager d'utiliser la méthode update() du dictionnaire pour fusionner plusieurs dictionnaires, par exemple :

from collections import ChainMap
a={'x':1,'z':3}
b={'y':2,'z':4}
#为了防止b被直接修改,先cope一份b
c=dict(b)
print(id(c))
print(id(b))
c.update(a)
print(c['x'])
print(c['y'])
print(c['z'])
Copier après la connexion

Résultats en cours :

4550769400
4549694808
1
2
3
Copier après la connexion

Cela fonctionne, mais cela nécessite de construire un objet dictionnaire complet séparément (ou d'en modifier un directement, ce qui détruira les données d'origine). De plus, si l'un des dictionnaires d'origine est modifié, les modifications ne seront pas reflétées dans le dictionnaire fusionné, mais ChainMap le sera.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!