Maison >développement back-end >Tutoriel Python >Le livre de recettes Python (structures de données et algorithmes) combine plusieurs mappages en un seul mappage

Le livre de recettes Python (structures de données et algorithmes) combine plusieurs mappages en un seul mappage

不言
不言original
2018-04-19 13:45:381573parcourir

Cet article présente principalement la méthode de fusion de plusieurs mappages en un seul mappage dans le livre de recettes Python (structure des données et algorithme). Il analyse les compétences de mise en œuvre liées aux opérations de fusion de mappages de dictionnaires Python sous forme d'exemples. à cela

L'exemple de cet article décrit la méthode Python permettant de fusionner plusieurs mappages en un seul mappage. Partagez-le avec tout le monde pour votre référence, comme suit :

Question : Fusionnez logiquement plusieurs dictionnaires ou mappages en une seule structure de mappage pour effectuer certaines opérations, par exemple rechercher une valeur ou vérifier si une clé existe

Solution : Utilisez la classe collections dans le module ChainMap

ChainMap pour accepter plusieurs mappages puis les faire apparaître logiquement comme une structure de cartographie unique. Ces mappages ne sont pas littéralement fusionnés. Au lieu de cela, ChainMap maintient simplement une liste enregistrant les relations de mappage sous-jacentes, puis redéfinit les opérations courantes du dictionnaire pour analyser cette liste.

# example.py
#
# Example of combining dicts into a chainmap
a = {'x': 1, 'z': 3 }
b = {'y': 2, 'z': 4 }
# (a) Simple example of combining
from collections import ChainMap
c = ChainMap(a,b) #如果有重复的键,那么会采用第一个映射中所对应的值。
print(c['x'])   # Outputs 1 (from a)
print(c['y'])   # Outputs 2 (from b)
print(c['z'])   # Outputs 3 (from a)
# Output some common values
print('len(c):', len(c))
print('c.keys():', list(c.keys()))
print('c.values():', list(c.values()))
# Modify some values
c['z'] = 10
c['w'] = 40
print("a:", a)
del c['x']
print("a:", a)
# Example of stacking mappings (like scopes)
values = ChainMap()
values['x'] = 1
# Add a new mapping
values = values.new_child()
values['x'] = 2
# Add a new mapping
values = values.new_child()
values['x'] = 3
print(values)
print(values['x'])
# Discard last mapping
values = values.parents
print(values)
print(values['x'])
# Discard last mapping
values = values.parents
print(values)
print(values['x'])

>>> ================================ RESTART ================================
>>>
1
2
3
len(c): 3
c.keys(): ['y', 'x', 'z']
c.values(): [2, 1, 3]
a: {'x': 1, 'z': 10, 'w': 40}
a: {'z': 10, 'w': 40}
ChainMap({'x': 3}, {'x': 2}, {'x': 1})
3
ChainMap({'x': 2}, {'x': 1})
2
ChainMap({'x': 1})
1
>>>

De plus, ChainMap fonctionne sur le dictionnaire original, ce qui peut éviter certains choses désagréables. Un comportement insatisfaisant, par exemple, des modifications apportées à l'un des dictionnaires originaux ne peuvent pas être reflétées dans le dictionnaire fusionné.

>>> a={'x':1,'z':3}
>>> b={'y':2,'z':4}
>>> merged=ChainMap(a,b)
>>> merged
ChainMap({'x': 1, 'z': 3}, {'y': 2, 'z': 4})
>>> merged['x']
1
>>> a['x']=55
>>> merged['x']
55
>>> merged
ChainMap({'x': 55, 'z': 3}, {'y': 2, 'z': 4})
>>>

(le code est extrait de "Python Cookbook")

Recommandations associées :

Python livre de recettes (Chaînes et texte) Opérations de fractionnement de chaînes pour un nombre quelconque de délimiteurs

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:
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