list-of-dicts: overviewΒΆ

The list-of-dicts source reads data from a list of dictionaries.

First, we create the input data using generic metadata keys. The latitudes and longitudes specified as disctinct values, the 2D field geometry will be automatically built from them.

[1]:
import earthkit.data as ekd

prototype = {
    "geography": {"latitudes": [10.0, 0.0, -10.0], "longitudes": [20, 40.0]},
    "values": [1, 2, 3, 4, 5, 6],
    "time": {"valid_datetime": "2018-08-01T09:00:00Z"},
}

d = [
    {"parameter": {"variable": "t"}, "vertical": {"level": 500}, **prototype},
    {"parameter": {"variable": "t"}, "vertical": {"level": 850}, **prototype},
    {"parameter": {"variable": "u"}, "vertical": {"level": 500}, **prototype},
    {"parameter": {"variable": "u"}, "vertical": {"level": 850}, **prototype},
    {"parameter": {"variable": "d"}, "vertical": {"level": 850}, **prototype},
    {"parameter": {"variable": "d"}, "vertical": {"level": 600}, **prototype},
]

Next, load the data into fieldlist as a list-of-dicts source using from_source().

[2]:
ds = ekd.from_source("list-of-dicts", d).to_fieldlist()
[3]:
ds.ls()
[3]:
parameter.variable time.valid_datetime time.base_datetime time.step vertical.level vertical.level_type ensemble.member geography.grid_type
0 t 2018-08-01 09:00:00+00:00 2018-08-01 09:00:00+00:00 0 days 500 unknown None _distinct_ll
1 t 2018-08-01 09:00:00+00:00 2018-08-01 09:00:00+00:00 0 days 850 unknown None _distinct_ll
2 u 2018-08-01 09:00:00+00:00 2018-08-01 09:00:00+00:00 0 days 500 unknown None _distinct_ll
3 u 2018-08-01 09:00:00+00:00 2018-08-01 09:00:00+00:00 0 days 850 unknown None _distinct_ll
4 d 2018-08-01 09:00:00+00:00 2018-08-01 09:00:00+00:00 0 days 850 unknown None _distinct_ll
5 d 2018-08-01 09:00:00+00:00 2018-08-01 09:00:00+00:00 0 days 600 unknown None _distinct_ll
[4]:
ds[0].geography.latlons()
[4]:
(array([[ 10.,  10.],
        [  0.,   0.],
        [-10., -10.]]),
 array([[20., 40.],
        [20., 40.],
        [20., 40.]]))
[5]:
ds.to_numpy()
[5]:
array([[[1, 2],
        [3, 4],
        [5, 6]],

       [[1, 2],
        [3, 4],
        [5, 6]],

       [[1, 2],
        [3, 4],
        [5, 6]],

       [[1, 2],
        [3, 4],
        [5, 6]],

       [[1, 2],
        [3, 4],
        [5, 6]],

       [[1, 2],
        [3, 4],
        [5, 6]]])
[6]:
ds.get("vertical.level")
[6]:
[500, 850, 500, 850, 850, 600]
[7]:
ds[0].time.valid_datetime()
[7]:
datetime.datetime(2018, 8, 1, 9, 0, tzinfo=datetime.timezone.utc)
[8]:
ds.sel({"parameter.variable": "t"}).ls()
[8]:
parameter.variable time.valid_datetime time.base_datetime time.step vertical.level vertical.level_type ensemble.member geography.grid_type
0 t 2018-08-01 09:00:00+00:00 2018-08-01 09:00:00+00:00 0 days 500 unknown None _distinct_ll
1 t 2018-08-01 09:00:00+00:00 2018-08-01 09:00:00+00:00 0 days 850 unknown None _distinct_ll
[9]:
ds.order_by("vertical.level").ls()
[9]:
parameter.variable time.valid_datetime time.base_datetime time.step vertical.level vertical.level_type ensemble.member geography.grid_type
0 t 2018-08-01 09:00:00+00:00 2018-08-01 09:00:00+00:00 0 days 500 unknown None _distinct_ll
1 u 2018-08-01 09:00:00+00:00 2018-08-01 09:00:00+00:00 0 days 500 unknown None _distinct_ll
2 d 2018-08-01 09:00:00+00:00 2018-08-01 09:00:00+00:00 0 days 600 unknown None _distinct_ll
3 t 2018-08-01 09:00:00+00:00 2018-08-01 09:00:00+00:00 0 days 850 unknown None _distinct_ll
4 u 2018-08-01 09:00:00+00:00 2018-08-01 09:00:00+00:00 0 days 850 unknown None _distinct_ll
5 d 2018-08-01 09:00:00+00:00 2018-08-01 09:00:00+00:00 0 days 850 unknown None _distinct_ll