Мы можем воспользоваться Типизированными списками , которые поддерживают вложенность . Я использую List(lsttype=...)
, чтобы вручную указать тип, который, к сожалению, официальные документы не показывают, но имейте в виду, что типизированные списки в настоящее время являются экспериментальной функцией (v 0.47) и могут быть изменены в более поздних выпусках.
>>> from numba.typed import Dict, List
>>> from numba.types import float32, unicode_type, ListType
>>> py_dct = {
... "Seattle": [[[1.2, 3.5], [4.5, 6.7]]],
... "New York":[ [[5.7, 22.4], [3.5, 7.8], [6.9, 4.1]], [[2.3, 4.5]]],
... "Boston": [[[2.4, 5.0]]]
... }
>>> nested_3 = ListType(ListType(ListType(float32)))
>>> nested_2 = ListType(ListType(float32))
>>> nested_1 = ListType(float32)
>>> nb_dct = Dict.empty(
... key_type=unicode_type,
... value_type=nested_3,
... )
>>> for city, lst in py_dct.items():
... out_lst = List(lsttype=nested_3)
... for outer in lst:
... mid_lst = List(lsttype=nested_2)
... for middle in outer:
... in_lst = List(lsttype=nested_1)
... for inner in middle:
... in_lst.append(inner)
... mid_lst.append(in_lst)
... out_lst.append(mid_lst)
... nb_dct[city] = out_lst
>>> nb_dct['Seattle']
ListType[ListType[ListType[float32]]]([[[1.2000000476837158, 3.5], [4.5, 6.699999809265137]]])
>>> nb_dct['New York']
ListType[ListType[ListType[float32]]]([[[5.699999809265137, 22.399999618530273], [3.5, 7.800000190734863], [6.900000095367432, 4.099999904632568]], [[2.299999952316284, 4.5]]])
>>> nb_dct['Boston']
ListType[ListType[ListType[float32]]]([[[2.4000000953674316, 5.0]]])