|
4 | 4 | import inspect
|
5 | 5 | import itertools
|
6 | 6 | import re
|
7 |
| -from collections import ChainMap, namedtuple |
| 7 | +from collections import ChainMap, defaultdict, namedtuple |
8 | 8 | from collections.abc import (
|
9 | 9 | Callable,
|
10 | 10 | Hashable,
|
@@ -2990,21 +2990,11 @@ def grid_mapping_names(self) -> dict[str, list[str]]:
|
2990 | 2990 | # Parse potentially multiple grid mappings
|
2991 | 2991 | grid_mapping_var_names = _parse_grid_mapping_attribute(grid_mapping_attr)
|
2992 | 2992 |
|
2993 |
| - results = {} |
2994 |
| - for grid_mapping_var_name in grid_mapping_var_names: |
2995 |
| - # First check if it's in the DataArray's coords (for multiple grid mappings |
2996 |
| - # that are coordinates of the DataArray) |
2997 |
| - if grid_mapping_var_name in da.coords: |
2998 |
| - grid_mapping_var = da.coords[grid_mapping_var_name] |
2999 |
| - if "grid_mapping_name" in grid_mapping_var.attrs: |
3000 |
| - gmn = grid_mapping_var.attrs["grid_mapping_name"] |
3001 |
| - if gmn not in results: |
3002 |
| - results[gmn] = [grid_mapping_var_name] |
3003 |
| - else: |
3004 |
| - results[gmn].append(grid_mapping_var_name) |
3005 |
| - # For standalone DataArrays, the grid mapping variables may not be available |
3006 |
| - # This is a limitation of the xarray data model - when you extract a DataArray |
3007 |
| - # from a Dataset, it doesn't carry over non-coordinate variables |
| 2993 | + results = defaultdict(list) |
| 2994 | + for grid_mapping_var_name in grid_mapping_var_names and set(da.coords): |
| 2995 | + grid_mapping_var = da.coords[grid_mapping_var_name] |
| 2996 | + if gmn := grid_mapping_var.attrs.get("grid_mapping_name"): |
| 2997 | + results[gmn].append(grid_mapping_var_name) |
3008 | 2998 |
|
3009 | 2999 | return results
|
3010 | 3000 |
|
|
0 commit comments