Essayez d'utiliser le module de collections (ChainMap) de python3

collections Les collections contiennent des types de données de conteneur. Dans python3 (3.4.3), il y a quelques ajouts à celui de python2.7. URL de référence: http://docs.python.jp/3.4/library/collections.html Les points ajoutés à partir de python2.7 sont les suivants.

ChainMap: une classe de type dictionnaire qui crée une vue unique de plusieurs mappages UserDict: un wrapper pour les objets de dictionnaire qui simplifie la sous-classification du dictionnaire UserList: wrapper d'objet de liste qui simplifie la sous-classification de liste UserString: un wrapper pour les objets chaîne qui facilite la sous-classe des chaînes

L'utilisateur ~ est généralement un wrapper de classe, donc l'explication est omise.

ChainMap

De base

Le code que j'ai écrit cette fois est sur GitHub. (https://github.com/KodairaTomonori/Qiita/blob/master/default_module/collections/test_ChainMap.py) Tout d'abord, de la simple utilisation de ChainMap

test_ChainMap.py


import collections
import see
dict_a = dict(a=1, b=2, c=3)
dict_b = dict(x=10, y=11, z=12)
def get_name(arg_id, arg_values):
    for key, value in arg_values.items():
        if id(value) == arg_id: return key
    return 'NotDefined'

def print_arguments(*args, arg_values):
    for arg in args:
        print(get_name(id(arg), arg_values) + ' : ' + repr(arg) )

chain_map = collections.ChainMap(dict_a, dict_b)
child = chain_map.new_child()
print('make_chain_maps')
print_arguments(chain_map, child, arg_values=locals() )
print('chain_map.maps: ' + repr(chain_map.maps) )

production

make_chain_maps chain_map : ChainMap({'b': 2, 'c': 3, 'a': 1}, {'z': 12, 'x': 10, 'y': 11}) child : ChainMap({}, {'b': 2, 'c': 3, 'a': 1}, {'z': 12, 'x': 10, 'y': 11}) chain_map.maps: [{'a': 1, 'c': 3, 'b': 2}, {'y': 11, 'z': 12, 'x': 10}]

La description

Comme son nom l'indique, ChainMap connecte la carte (dictionaly). Au lieu de simplement les connecter, vous pouvez conserver chacun d'eux sous forme de dictionnaire. Ainsi, comme vous pouvez le voir dans la sortie, chacun des dict_a et dict_best séparé. Si vous faiteschain ['z'] et chain_map ['b'], vous obtiendrez respectivement '2 et 12'. Lorsque vous l'utilisez, vous pouvez l'utiliser normalement comme un seul dict. En définissant .new_child (), un nouveau dictsera créé au début. En définissant.maps`, ChainMap sera répertorié et renvoyé.

Bien que cela ne soit pas écrit dans le code, vous pouvez utiliser .items (), .keys (), .values () comme normal dict. En regardant l'URL de référence, il semble que la recherche se fasse par l'avant et les autres seulement par l'avant.

La recherche continue de rechercher le mappage sous-jacent jusqu'à ce que la clé soit trouvée. En revanche, l'écriture, la mise à jour et la suppression ne fonctionnent que sur le premier mappage.

Mises à jour des enfants et des parents

Ensuite, nous mettrons à jour.

update.py


child.update(d=4, a=0)
print('update_child_map')
print_arguments(chain_map, child, arg_values=locals() )
print()

chain_map.update(z=100)
print('update_parent_map')
print_arguments(chain_map, child, arg_values=locals() )

Sortie 2

update_child_map chain_map : ChainMap({'a': 1, 'c': 3, 'b': 2}, {'y': 11, 'z': 12, 'x': 10}) child : ChainMap({'a': 0, 'd': 4}, {'a': 1, 'c': 3, 'b': 2}, {'y': 11, 'z': 12, 'x': 10}) update_parent_map chain_map : ChainMap({'a': 1, 'z': 100, 'c': 3, 'b': 2}, {'y': 11, 'z': 12, 'x': 10}) child : ChainMap({'a': 0, 'd': 4}, {'a': 1, 'z': 100, 'c': 3, 'b': 2}, {'y': 11, 'z': 12, 'x': 10})

Explication 2

L'écriture ou la mise à jour vers l'enfant (dict le plus à gauche) ne change pas le parent (dict autre que le dict le plus à gauche). De plus, si vous changez de parent, le changement sera reflété dans «enfant». Les pointeurs des éléments communs de chain_map et child semblent pointer vers le même endroit.

fusionner

Comment créer un dictionnaire lorsque quelque chose est désordonné et difficile à voir. Vous pouvez simplement le mettre dans dict ().

merge.py


print('each_Chain')
print('chain_map:', dict(**chain_map) )
print('child    :', dict(**child) )

production

each_Chain chain_map: {'x': 10, 'z': 100, 'c': 3, 'b': 2, 'a': 1, 'y': 11} child : {'x': 10, 'z': 100, 'c': 3, 'b': 2, 'a': 0, 'd': 4, 'y': 11}

Résumé

ChainMap est pratique, mais je ne vois aucune utilité pour cela.

Cette classe peut être utilisée pour simuler des portées imbriquées et est utile pour le mappage.

Bien qu'il soit écrit dans l'URL de référence, je ne comprends pas bien car il ne s'agit que de Katakana. Il semble qu'il puisse être utilisé pour vérifier la mise à jour des poids lors de l'apprentissage avec la PNL.

Recommended Posts

Essayez d'utiliser le module de collections (ChainMap) de python3
Essayez d'utiliser le module Python Cmd
Afficher à l'aide du module python du backend mobile Nifty Cloud
Module de collections Python
Essayez d'utiliser l'API Wunderlist en Python
Passez le chemin du module python importé
[Python] Essayez pydash de la version Python de lodash
Vérifiez le chemin du module importé Python
Essai du parseur d'emacs-org orgparse pour python
[Python] Exécutons le module régulièrement en utilisant schedule
Essayez d'utiliser l'API BitFlyer Ligntning en Python
Python: essayez d'utiliser l'interface utilisateur sur Pythonista 3 sur iPad
le zen de Python
Essayez d'utiliser le framework Web Python Tornado Partie 1
Essayez Progate Free Edition [Python I]
J'ai essayé d'utiliser le module Datetime de Python
[Python] Une compréhension approximative du module de journalisation
Essayez d'utiliser le framework Web Python Tornado Partie 2
Essayez d'utiliser Tweepy [Python2.7]
Essayez d'utiliser l'API DropBox Core avec Python
Explication du concept d'analyse de régression à l'aide de python Partie 2
Découpez une partie de la chaîne à l'aide d'une tranche Python
Essayez de projeter la conversion d'image en utilisant OpenCV avec Python
La douleur de gRPC en utilisant Python. Novembre 2019. (Mémo personnel)
Utilisons la version Python du module API Confluence.
Explication du concept d'analyse de régression à l'aide de Python Partie 1
Écrire des données dans KINTONE à l'aide du module de requêtes Python
Explication du concept d'analyse de régression à l'aide de Python Extra 1
Étude de Python Hour8: Utilisation de packages
Vers la retraite de Python2
À propos du module Python venv
Essayez d'utiliser Kubernetes Client -Python-
Mise à jour automatique du module Python
Essayez d'utiliser l'API Twitter
python: principes de base de l'utilisation de scikit-learn ①
Essayez d'utiliser l'API Twitter
Essayez d'utiliser l'API PeeringDB 2.0
À propos des fonctionnalités de Python
Le pouvoir des pandas: Python
Essayez de gratter les données COVID-19 Tokyo avec Python
Essayez d'obtenir la liste des fonctions du paquet Python> os
Essayez d'utiliser le framework Web Python Django (2) - Regardez setting.py
Facilitez la compréhension de l'affichage des exceptions du module Python
Essayez une recherche similaire de recherche d'images à l'aide du SDK Python [Recherche]
Résolvez le problème japonais lors de l'utilisation du module CSV en Python.
Quelle est la version TLS par défaut du module de requêtes python?
[Python] J'ai essayé de collecter des données en utilisant l'API de wikipedia
2015-11-26 python> Afficher la liste des fonctions du module> import math> dir (math)
Tester la version du module argparse
L'histoire de Python et l'histoire de NaN
[Python] La pierre d'achoppement de l'importation
First Python 3 ~ Le début de la répétition ~
Essayez le SDK Python LINE Pay
Un bref résumé de la collection Python
Existence du point de vue de Python
Essayez d'utiliser l'API de Pleasant (python / FastAPI)
pyenv-changer la version python de virtualenv
Essayez d'utiliser LevelDB avec Python (plyvel)