diff --git a/pandas/_typing.py b/pandas/_typing.py index 9f23fcc56597f..a58dc0dba1bf1 100644 --- a/pandas/_typing.py +++ b/pandas/_typing.py @@ -36,7 +36,10 @@ # and use a string literal forward reference to it in subsequent types # https://mypy.readthedocs.io/en/latest/common_issues.html#import-cycles if TYPE_CHECKING: - from typing import final + from typing import ( + TypedDict, + final, + ) from pandas._libs import ( Period, @@ -70,6 +73,8 @@ else: # typing.final does not exist until py38 final = lambda x: x + # typing.TypedDict does not exist until py38 + TypedDict = dict # array-like diff --git a/pandas/io/formats/style_render.py b/pandas/io/formats/style_render.py index 15557c993eab4..776cedcf11592 100644 --- a/pandas/io/formats/style_render.py +++ b/pandas/io/formats/style_render.py @@ -12,7 +12,6 @@ Sequence, Tuple, Union, - cast, ) from uuid import uuid4 @@ -21,7 +20,10 @@ from pandas._config import get_option from pandas._libs import lib -from pandas._typing import FrameOrSeriesUnion +from pandas._typing import ( + FrameOrSeriesUnion, + TypedDict, +) from pandas.compat._optional import import_optional_dependency from pandas.core.dtypes.generic import ABCSeries @@ -45,10 +47,14 @@ CSSPair = Tuple[str, Union[str, int, float]] CSSList = List[CSSPair] CSSProperties = Union[str, CSSList] -CSSStyles = List[Dict[str, CSSProperties]] # = List[CSSDict] -# class CSSDict(TypedDict): # available when TypedDict is valid in pandas -# selector: str -# props: CSSProperties + + +class CSSDict(TypedDict): + selector: str + props: CSSProperties + + +CSSStyles = List[CSSDict] class StylerRenderer: @@ -615,15 +621,9 @@ def _format_table_styles(styles: CSSStyles) -> CSSStyles: {'selector': 'th', 'props': 'a:v;'}] """ return [ - item - for sublist in [ - [ # this is a CSSDict when TypedDict is available to avoid cast. - {"selector": x, "props": style["props"]} - for x in cast(str, style["selector"]).split(",") - ] - for style in styles - ] - for item in sublist + {"selector": selector, "props": css_dict["props"]} + for css_dict in styles + for selector in css_dict["selector"].split(",") ]