dict.get_deep()
Kirill Ratkin
kirill.ratkin at devoteam.com
Sun Apr 3 10:58:09 EDT 2022
Hi Marco.
Recently I met same issue. A service I intergated with was documented
badly and sent ... unpredictable jsons.
And pattern matching helped me in first solution. (later I switched to
Pydantic models)
For your example I'd make match rule for key path you need. For example:
data = {"users": [{"address": {"street": "Baker"}}]}
match data:
case {"users": [{"address": {"street": street}}]}:
print(f"street: {street}")
case _:
print("unsupported message structure")
Structural matching gives you warranty you process exactly message you
expect and explicitly discards messages with another structure.
But type is still issue. I don't know how to say 'street' must be 'str'
not 'int'. That's why I switched to Pydantic.
02.04.2022 23:44, Marco Sulla пишет:
> A proposal. Very often dict are used as a deeply nested carrier of
> data, usually decoded from JSON. Sometimes I needed to get some of
> this data, something like this:
>
> data["users"][0]["address"]["street"]
>
> What about something like this instead?
>
> data.get_deep("users", 0, "address", "street")
>
> and also, instead of this
>
> try:
> result = data["users"][0]["address"]["street"]
> except KeyError, IndexError:
> result = "second star"
>
> write this:
>
> data.get_deep("users", 0, "address", "street", default="second star")
>
> ?
More information about the Python-list
mailing list