Comments (2)
Have you considered Or(Match(structure), default)
?
Match
is specifically designed for checking structure in a flexible and concise way.
edit: docs https://glom.readthedocs.io/en/latest/matching.html
from glom.
For the exact example you gave:
good_data = {"a": {"c": 1}}
bad_data = {"a": [{"c": 1}]}
The reason PathAccessError
gave ValueError
is that "a" and "b" are being interpreted as Paths -- you could do "a.b"
instead of ("a", "b")
and get the exact same result. As a Path, "a.0.c"
will unpack the bad-data. When it sees a list in the target, it tries to parse the corresponding Path segment as an int to use as the list index.
This can be made less ambiguous by using glom.T
. T["a"]["b"]
will try to do __getitem__()
in both cases.
Although, still I think that Match
is really the bigger brother of Coalesce
and probably what you want.
from glom.
Related Issues (20)
- glom.grouping is super useful actually HOT 1
- Inconsistent Delete Behavior HOT 5
- Extract nodes from json based on user input preserveing a portion of the higher level object as well HOT 1
- unprintable PathAccessError when using Scope/S
- Assign a target with an object which has a `__setattr__` which returns a callable produces a false positive for `glom.core._has_callable_glomit` HOT 4
- Recurive wildcard produces a StopIteration exception when called on objects containing iterators HOT 2
- GitHub releases not updated for 23.1.0 and 23.1.1 HOT 2
- Scope usage changes from v22 to v23 HOT 7
- Question, how to pull items into an array in a spec? HOT 1
- Replace deprecated imp module with importlib HOT 2
- Traceback mismatch in a couple tests on 3.11+ HOT 8
- `skip` option for Coalesce doesn't seems to work HOT 2
- Inspect output is not clear HOT 1
- replicate logic with Switch HOT 2
- Missing assert in test_mutation.py HOT 1
- Missing assert in test_cli.py
- Enumerate and Assign HOT 2
- Recursive Delete-If-Empty? HOT 6
- Storing dict keys during traversal HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from glom.