Ich wusste es zum Zeitpunkt des Schreibens noch nicht, aber attrdict ist Don Pisha, wenn Sie nur nach Attributen auf dict zugreifen möchten.
Es kann wie folgt verwendet werden (zitiert aus dem offiziellen Dokument)
from attrdict import AttrDict a = AttrDict({'foo': 'bar'}) a.foo
'bar'
a['foo'] 'bar'
# Überblick und Motivation
Bei der Verarbeitung einer Web-API-Antwort, die json mit Python zurückgibt.
Im Allgemeinen ist die Hierarchie tief und es ist schwierig, darauf zu verweisen, während der Wert für jede Hierarchie überprüft wird.
Daher dachte ich, es wäre nützlich, eine _parse_-Funktion zu haben, die die folgenden Ausführungsergebnisse liefert.
```python
some_dict = {
"path":{
"to":{
"target":
"key": 1 }}}
# expected return: 1
parse(some_dict, "/path/to/target/key")
# expected return: None
parse(some_dict, "/fake/key")
Es fühlt sich in Bezug auf den Betrieb wie eine Art Abfrageparser an.
――Wenn Sie rekursiv verwenden, können Sie es so wie es ist schnell schreiben ――Ich dachte, es wäre schön, wenn ich es wie ein Pfadformat bezeichnen könnte, aber es geht darum, eine Aufteilung zu schreiben, die den Wörterbuchtyp unterstützt.
Minimale Implementierung.
d = {
'a': 1,
'b': [1, 2, 3],
'c': {
'ca': 1,
'cb': [2, 3, 4] }}
d2 = {
'a': 1,
'a/x': 2,
'b': {
'ba': 100 }}
def dparse(dic, p, sep="/", default=None):
lis = p.split(sep)
def _(dic, lis, sep, default):
if len(lis) == 0:
return default
if len(lis) == 1:
return dic.get(lis[0], default)
else:
return _(dic.get(lis[0], {}), lis[1:], sep, default)
return _(dic, lis, sep=sep, default=None)
if __name__=="__main__":
print dparse(d, "a") # 1
print dparse(d, "c/cb") # [2, 3, 4]
print dparse(d2, "a/x", sep=":") # 2
print dparse(d2, "b:ba", sep=":") # 100
Benennen Sie dparse entsprechend mit einem Bild, das dict parse macht.
Es sollte verschiedene Lücken geben, also warte ich auf Tsukkomi. Die schnelle Idee ist, dass diese Funktion unterbrochen wird, wenn sie "Keine als Wert" enthält. Es ist eine logische Fehlerquelle, da nicht zwischen "nicht vorhanden" und "Keine als Wert" unterschieden werden kann. Das Wesentliche ist dasselbe, da das Argument default anders als None angegeben wird.
Es kann besser sein, den "nicht existierenden" Fall gehorsam anzusprechen.
Ich denke, dass ein Nutzen dieses Niveaus wahrscheinlich eine Neuerfindung von Rädern ist, daher würde ich gerne wissen, ob es ein gutes Mittel gibt, um diesen Zweck zu erreichen.
Der Code oder das Design ist hässlich, schreiben Sie dies! Wir freuen uns über Ihre Vorschläge.
Ich habe dparse als Funktionsnamen gewählt, weil mir kein passender Name einfiel, aber ich konnte den Namen nicht als Text ausdrücken, wenn ich also eine gute Idee hätte.
Recommended Posts