Comment fusionner les vues des éléments de deux dictionnaires en python?
Mon cas d'utilisation est: J'ai deux dictionnaires privés dans une classe. Je veux que l'API les traite comme un seul et fournisse une méthode items
en tant que telle. Le seul moyen que je connaisse est de les combiner puis de fournir une vue sur les deux, mais pour les grands dictionnaires, cela semble coûteux. Je pense à qc comme a.items () + b.items ()
Remarque: je ne me soucie pas des conflits de clés.
Voici ce que j'aimerais améliorer:
class A: _priv1 = {'a': 1, 'b': 2} _priv2 = {'c': 1, 'd': 2} def items(self): return {**self._priv1, **self._priv2}.items()
4 Réponses :
La fusion des vues des dictionnaires ne signifie rien car une vue reflète toujours le contenu du dictionnaire correspondant.
Donc, pour avoir une vue différente, soit vous éditez l'un de vos dictionnaires, soit vous en instanciez un nouveau (comme vous l'avez fait), il n'y a pas moyen de le contourner. Voir ceci .
Mais peut-être que ce que vous voulez, c'est itertools.chain
pour itérer sur plusieurs itérables. Cette solution n'est pas insatiable. Ou comme d'autres l'ont dit collections.ChainMap
< / a>. J'utiliserais chain
pour itérer et ChainMap
pour faire des recherches.
Vous pouvez utiliser ChainMap
:
from collections import ChainMap class A: _priv1 = {'a': 1, 'b': 2} _priv2 = {'c': 1, 'd': 2} def items(self): return ChainMap(self._priv1, self._priv2)