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 |