# libtmux._internal.query_list.keygetter

- **Module:** libtmux._internal.query_list
- **Package:** libtmux
- **Language:** Python
- **Kind:** function
- **Source:** https://github.com/tmux-python/libtmux/blob/036c521c4b83ce6e434eb50afe2a0d08a6a05e46/src/libtmux/_internal/query_list.py#L41
- **Page:** https://libtmux.org/reference/py/libtmux-_internal-query_list-keygetter/

```
libtmux._internal.query_list.keygetter(obj: Mapping[str, t.Any], path: str) -> t.Any | str | list[str] | Mapping[str, str] | None
```

Fetch values in objects and keys, supported nested data.

**With dictionaries**:

>>> keygetter({ "food": { "breakfast": "cereal" } }, "food")
{'breakfast': 'cereal'}

>>> keygetter({ "food": { "breakfast": "cereal" } }, "food__breakfast")
'cereal'

**With objects**:

>>> from typing import List, Optional
>>> from dataclasses import dataclass, field

>>> @dataclass()
... class Food:
...     fruit: List[str] = field(default_factory=list)
...     breakfast: Optional[str] = None

>>> @dataclass()
... class Restaurant:
...     place: str
...     city: str
...     state: str
...     food: Food = field(default_factory=Food)

>>> restaurant = Restaurant(
...     place="Largo",
...     city="Tampa",
...     state="Florida",
...     food=Food(
...         fruit=["banana", "orange"], breakfast="cereal"
...     )
... )

>>> restaurant
Restaurant(place='Largo',
    city='Tampa',
    state='Florida',
    food=Food(fruit=['banana', 'orange'], breakfast='cereal'))

>>> keygetter(restaurant, "food")
Food(fruit=['banana', 'orange'], breakfast='cereal')

>>> keygetter(restaurant, "food__breakfast")
'cereal'
