классы данных: как игнорировать значения None с помощью asdict ()? - PullRequest
1 голос
/ 01 июля 2019
@dataclass
class Car:
    brand: str
    color: str

Как я могу получить дикт, который игнорирует значения None?Что-то вроде:

>>> car = Car(brand="Audi", color=None)
>>> asdict(car, some_option_to_ignore_none_values=True)
> {'brand': 'Audi'}

1 Ответ

1 голос
/ 01 июля 2019

Вот, пожалуйста,

from dataclasses import dataclass


@dataclass
class Car:
    brand: str
    color: str


def asdict(o, skip_empty=False):
    return {k: v
            for k, v in o.__dict__.items()
            if not (skip_empty and v is None)}


if __name__ == '__main__':
    c = Car(brand='BMW', color=None)
    print(asdict(c, skip_empty=False))
    print(asdict(c, skip_empty=True))

, который печатает:

{'brand': 'BMW', 'color': None}
{'brand': 'BMW'}
...