This is my code for my e-paper display that formats differently for highest and lowest price during the day.
Perhaps this can be useful for you?
{% set ns = namespace( text_list = [], line =0) %}
{% set nordpool ="sensor.nordpool_kwh_se4_sek_3_10_025" %}
{% set cheapest = 5 %}
{% set expensivest = 5 %}
{% set decimal = "," %} {## decimal separator in currency ##}
{% set currency = "kr" %} {## include space if needed/wanted ##}
{% set position = "trailing" %} {## trailing or leading ##}
{% set decimal_places = 2 %}
{% for day in ["today", "tomorrow"] %}
{% for s in state_attr(nordpool,'raw_' ~ day)-%}
{% if s.end > now() -%}
{%- set ns.text_list = ns.text_list +
[{ "type": "rectangle",
"x_start": 1,
"x_end": 127,
"y_start": 1 + (25*ns.line),
"y_end": 25 + (25*ns.line),
"width": 4 if s.value in (state_attr(nordpool, day) | sort(reverse = false))[0:cheapest] else 2,
"fill": "white",
"outline": "red" if s.value in (state_attr(nordpool, day) | sort(reverse = false))[0:cheapest] else "black"}] +
[{ "type": "text",
"value": ("0" ~ s.start.hour)[-2:3] ~ ":00",
"font": "ppb.ttf",
"x": 5,
"y": 7 + (25*ns.line),
"size": 16,
"color": "red" if s.value in (state_attr(nordpool, day) | sort(reverse = true))[0:expensivest] else "black"} ] +
[{ "type": "text",
"value": (currency if position == "leading") ~ (((s.value | round(decimal_places) ~ "00000")[0:decimal_places+(s.value|string).split(".")[0]|length +1]) |string).replace(".", decimal) ~ (currency if position == "trailing"),
"font": "ppb.ttf",
"x": 58,
"y": 7 + (25*ns.line),
"size": 16,
"color": "red" if s.value in (state_attr(nordpool, day) | sort(reverse = true))[0:expensivest] else "black"} ] -%}
{% set ns.line = ns.line + 1 %}
{% endif %}
{%- endfor -%}
{%- endfor -%}
{{ ns.text_list }}
Or have a look at: