Je ne savais pas au moment de la rédaction, mais attrdict est Don Pisha si vous voulez seulement accéder à dict par attribut.
Il peut être utilisé comme suit (cité du document officiel)
from attrdict import AttrDict a = AttrDict({'foo': 'bar'}) a.foo
'bar'
a['foo'] 'bar'
# Vue d'ensemble et motivation
Lors de la gestion d'une réponse d'API Web qui renvoie json avec python.
Généralement, la hiérarchie est profonde et il est difficile de s'y référer tout en vérifiant la valeur de chaque hiérarchie.
Donc, j'ai pensé qu'il serait utile d'avoir une fonction _parse_ qui donnerait les résultats d'exécution suivants.
```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")
Cela ressemble à une sorte d'analyseur de requêtes en termes de fonctionnement.
――Si vous utilisez récursif, vous pouvez l'écrire rapidement tel quel ――Je pensais que ce serait bien si je pouvais y faire référence comme un format de chemin, mais le but est d'écrire une division qui prend en charge le type de dictionnaire.
Implémentation minimale.
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
Nommez dparse de manière appropriée avec une image qui rend dict parse.
Il devrait y avoir plusieurs failles, alors j'attends Tsukkomi. L'idée rapide est que cette fonction sera interrompue si elle contient "Aucun comme valeur". Il s'agit d'une source d'erreur logique car «Aucune en tant que valeur» ne peut être distinguée de «n'existe pas». L'essence est la même car l'argument default est spécifié autrement que None.
Il peut être préférable de soulever docilement le cas «inexistant».
Je pense qu'une utilité de ce niveau est probablement une réinvention des roues, alors j'aimerais savoir s'il existe un bon moyen pour atteindre cet objectif.
Le code ou la conception est moche, écrivez ceci! Nous apprécions vos suggestions.
J'ai choisi dparse pour le nom de la fonction parce que je ne pouvais pas penser à un nom approprié, mais je ne pouvais pas exprimer le nom donc si j'avais une bonne idée.
Recommended Posts