Attributzugriff auf Python dict zulassen

Motivation

In Python können Sie im Gegensatz zu JavaScript nicht mit Attribut auf Wörterbuchelemente zugreifen. Das heißt, "dict_obj [" value "]" ist in Ordnung, aber nicht "dict_obj.value".

Dies ist die Unannehmlichkeit beim Arbeiten mit Json-Daten. Auf der JavaScript-Seite kann schließlich mit Attribut darauf zugegriffen werden. Es liegt also in der Natur des Menschen, auf die gleiche Weise schreiben zu wollen.

Deshalb zeige ich Ihnen, wie Sie mit einem Attribut auf das Diktat zugreifen (diesmal unter der Annahme eines Json-Objekts).

Implementierung

In Python wird Json durch das Laden zu einem Wörterbuch.

>>> import json
>>> json.loads('{"v1":"xxxx", "v2":"vvvv"}')
{'v1': 'vvvv', 'v2': 'xxxx'}

Wie oben erwähnt, erfolgt der Zugriff beim Zugriff in Form von "obj [" v1 "]" und "obj.vi" als NG.

Der einfachste Weg, dies zu lösen, ist die Verwendung einer Bibliothek namens attrdict.

Wenn Sie es jedoch nicht installieren möchten, können Sie die folgende einfache Methode verwenden. Wenn Sie "json.loads" ausführen, verwenden Sie "object_hook", um jedes Objekt in eine Klasse zu verpacken, die den Attributzugriff implementiert ("getattr"). Sie können jetzt über Attribut auf das Element zugreifen.

import json

class AttributeDict(object):
    def __init__(self, obj):
        self.obj = obj

    def __getstate__(self):
        return self.obj.items()

    def __setstate__(self, items):
        if not hasattr(self, 'obj'):
            self.obj = {}
        for key, val in items:
            self.obj[key] = val

    def __getattr__(self, name):
        if name in self.obj:
            return self.obj.get(name)
        else:
            return None

    def fields(self):
        return self.obj

    def keys(self):
        return self.obj.keys()

if __name__ == "__main__":
    attribute_json = json.loads('{"v1":"xxxx", "v2":"vvvv"}', object_hook=AttributeDict)
    print("attribute_json.v1 = {0}".format(attribute_json.v1))

    json_with_array = json.loads('{"arr":[{"v":"xxxx"}, {"v":"vvvv"}]}', object_hook=AttributeDict)
    print("json_with_array[0].v = {0}".format(json_with_array.arr[0].v))

Ausführungsergebnis

attribute_json.v1 = xxxx
json_with_array[0].v = xxxx

Wenn Sie auf Attribute zugreifen können, können Sie den Code vervollständigen, sodass die Implementierung einfacher ist. Ich versuchte es.

Referenz

attrdict using JSON keys as python attributes in nested JSON soundcloud-python/resource.py Sample on Gist

Recommended Posts

Attributzugriff auf Python dict zulassen
Python / Machen Sie ein Diktat aus einer Liste.
Machen Sie Python-Wörterbücher als Attribute zugänglich
Alternative: Machen Sie Python-Wörterbücher als Attribute zugänglich
[Python] [R] GPU von Tensorflow-2.x erkennen lassen
Python Dict-Bereich
Python-Attribut-Alias
Primzahlbeurteilung durch Python
Kommunikationsverarbeitung durch Python
So erreichen Sie den Zugriff durch Attribut und Beibehaltung der Einfügereihenfolge in Python dict
[Python] Rufen Sie das Element ab, indem Sie das Namensattribut in BeautifulSoup angeben
Beamformer-Antwort von Python
[Python] So erstellen Sie eine Liste von Zeichenfolgen Zeichen für Zeichen
Spracherkennung durch Python MFCC
Sortieren nach dikt Typ Wert Wert
Verwendung von __dict__ in Python
EXE Web API von Python
Stellen Sie MeCab in Python 3 zur Verfügung
Newcomer Trainingsprogramm von Python
Parametereinstellung durch Python Configparser
Python Basic Dikt Sortierreihenfolge
Pin Python von Conda verwaltet
Verwenden Sie in Python ein Diktat mit Listenschlüssel
Machen Sie Jupyter Lab remote zugänglich
Erstelle Puyopuyo AI mit Python
Mach nicht test.py in Python!
Keyword-Extraktion mit MeCab (Python)
Zahlen durch 3 Ziffern trennen (Python)
Erstellen Sie ein Lesezeichen in Python
Machen Sie eine Lotterie mit Python
Stellen Sie Opencv in Python zur Verfügung
Markov-Schaltmodell von Python
Segfo Python in 2 Zeilen
Bildverarbeitung mit Python (Pillow)
Python wurde von C-Programmierern gestartet
Plattform (OS) Beurteilung durch Python
Sortieren nach Datum in Python
Schließen Sie sich csv an, das von Python-Pandas normalisiert wurde, um die Überprüfung zu vereinfachen