TG Telegram Group & Channel
Библиотека питониста | Python, Django, Flask | United States America (US)
Create: Update:

👓 Отслеживаем, какие ключи словаря в Python вы не использовали

Иногда полезно знать, какие поля данных вы вообще не задействовали — например, чтобы убедиться, что все данные из базы реально применяются в отчёте или покрыты тестами.

Представьте, что у вас SQL-запрос вида:

SELECT fieldX, fieldY, fieldZ FROM ...


Но в итоговом CSV-экспорте вы используете только fieldX и fieldY. Как понять, что fieldZ остался неиспользованным?

Класс TrackingDict

class TrackingDict(dict):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self._accessed_keys = set()

def __getitem__(self, key):
self._accessed_keys.add(key)
return super().__getitem__(key)

@property
def accessed_keys(self):
return self._accessed_keys

@property
def never_accessed_keys(self):
return set(self.keys()) - self._accessed_keys


Пример использования:
user = {
"name": "John Doe",
"age": 30,
"email": "[email protected]",
}
user = TrackingDict(user)

assert user["name"] == "John Doe"

print("Использованные ключи:", user.accessed_keys)
print("Неиспользованные ключи:", user.never_accessed_keys)


Выведет:
Использованные ключи: {'name'}
Неиспользованные ключи: {'email', 'age'}


Зачем это нужно

— Убедиться, что все важные данные действительно используются в отчётах.
— Проверить покрытие тестами — например, в pytest:

assert not user.never_accessed_keys, f"Вы не проверили {user.never_accessed_keys}"


Типизированная версия:
from typing import TypeVar, Any

K = TypeVar('K')
V = TypeVar('V')

class TrackingDict(dict[K, V]):
"""
Словарь с отслеживанием использованных ключей.
"""

def __init__(self, *args: Any, **kwargs: Any) -> None:
super().__init__(*args, **kwargs)
self._accessed_keys: set[K] = set()

def __getitem__(self, key: K) -> V:
self._accessed_keys.add(key)
return super().__getitem__(key)

@property
def accessed_keys(self) -> set[K]:
return self._accessed_keys

@property
def never_accessed_keys(self) -> set[K]:
return set(self.keys()) - self._accessed_keys


Библиотека питониста #буст

👓 Отслеживаем, какие ключи словаря в Python вы не использовали

Иногда полезно знать, какие поля данных вы вообще не задействовали — например, чтобы убедиться, что все данные из базы реально применяются в отчёте или покрыты тестами.

Представьте, что у вас SQL-запрос вида:
SELECT fieldX, fieldY, fieldZ FROM ...


Но в итоговом CSV-экспорте вы используете только fieldX и fieldY. Как понять, что fieldZ остался неиспользованным?

Класс TrackingDict

class TrackingDict(dict):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self._accessed_keys = set()

def __getitem__(self, key):
self._accessed_keys.add(key)
return super().__getitem__(key)

@property
def accessed_keys(self):
return self._accessed_keys

@property
def never_accessed_keys(self):
return set(self.keys()) - self._accessed_keys


Пример использования:
user = {
"name": "John Doe",
"age": 30,
"email": "[email protected]",
}
user = TrackingDict(user)

assert user["name"] == "John Doe"

print("Использованные ключи:", user.accessed_keys)
print("Неиспользованные ключи:", user.never_accessed_keys)


Выведет:
Использованные ключи: {'name'}
Неиспользованные ключи: {'email', 'age'}


Зачем это нужно

— Убедиться, что все важные данные действительно используются в отчётах.
— Проверить покрытие тестами — например, в pytest:

assert not user.never_accessed_keys, f"Вы не проверили {user.never_accessed_keys}"


Типизированная версия:
from typing import TypeVar, Any

K = TypeVar('K')
V = TypeVar('V')

class TrackingDict(dict[K, V]):
"""
Словарь с отслеживанием использованных ключей.
"""

def __init__(self, *args: Any, **kwargs: Any) -> None:
super().__init__(*args, **kwargs)
self._accessed_keys: set[K] = set()

def __getitem__(self, key: K) -> V:
self._accessed_keys.add(key)
return super().__getitem__(key)

@property
def accessed_keys(self) -> set[K]:
return self._accessed_keys

@property
def never_accessed_keys(self) -> set[K]:
return set(self.keys()) - self._accessed_keys


Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM


>>Click here to continue<<

Библиотека питониста | Python, Django, Flask






Share with your best friend
VIEW MORE

United States America Popular Telegram Group (US)