Maison >développement back-end >Tutoriel Python >Méthode Python et analyse de la fusion de plusieurs mappages en un seul mappage (exemple de code)

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

不言
不言avant
2018-11-26 16:39:492208parcourir

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}

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'])

Résultat d'exécution :

1
2
3
3
['y', 'z', 'x']
[2, 3, 1]
5

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键

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'])

Résultats en cours :

4550769400
4549694808
1
2
3

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer