зеркало из
https://github.com/viginum-datalab/twscrape.git
synced 2025-10-30 05:26:20 +02:00
38 строки
921 B
Python
38 строки
921 B
Python
from typing import Any, TypeVar
|
|
|
|
T = TypeVar("T")
|
|
|
|
|
|
# https://stackoverflow.com/a/43184871
|
|
def find_item(obj: dict, key: str, default=None):
|
|
stack = [iter(obj.items())]
|
|
while stack:
|
|
for k, v in stack[-1]:
|
|
if k == key:
|
|
return v
|
|
elif isinstance(v, dict):
|
|
stack.append(iter(v.items()))
|
|
break
|
|
elif isinstance(v, list):
|
|
stack.append(iter(enumerate(v)))
|
|
break
|
|
else:
|
|
stack.pop()
|
|
return default
|
|
|
|
|
|
def get_or(obj: dict, key: str, default_value: T = None) -> Any | T:
|
|
for part in key.split("."):
|
|
if part not in obj:
|
|
return default_value
|
|
obj = obj[part]
|
|
return obj
|
|
|
|
|
|
def int_or_none(obj: dict, key: str):
|
|
try:
|
|
val = get_or(obj, key)
|
|
return int(val) if val is not None else None
|
|
except Exception:
|
|
return None
|