html_url,issue_url,id,node_id,user,created_at,updated_at,author_association,body,reactions,performed_via_github_app,issue https://github.com/pydata/xarray/issues/567#issuecomment-216947679,https://api.github.com/repos/pydata/xarray/issues/567,216947679,MDEyOklzc3VlQ29tbWVudDIxNjk0NzY3OQ==,1217238,2016-05-04T17:54:58Z,2016-05-04T17:54:58Z,MEMBER,"`get_variables_by_attributes` does seem generic enough that we can safely add it to xarray. For our version, I would make this a Dataset method and always return another Dataset (no `strict` flag). Pulling out the single variable of a Dataset as a DataArray should be a separate method, e.g., `.item()` like the NumPy method. ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,105688738 https://github.com/pydata/xarray/issues/567#issuecomment-216944939,https://api.github.com/repos/pydata/xarray/issues/567,216944939,MDEyOklzc3VlQ29tbWVudDIxNjk0NDkzOQ==,1872600,2016-05-04T17:45:06Z,2016-05-04T17:45:06Z,NONE,":+1: -- I think this would be super-useful general functionality for the xarray community that doesn't come with any downside. ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,105688738 https://github.com/pydata/xarray/issues/567#issuecomment-216932304,https://api.github.com/repos/pydata/xarray/issues/567,216932304,MDEyOklzc3VlQ29tbWVudDIxNjkzMjMwNA==,950575,2016-05-04T17:01:19Z,2016-05-04T17:01:19Z,CONTRIBUTOR,"@shoyer this made into `netcdf4` and some people in my group would like to have this in `xarray` too. If you think it is worth it I can put a PR together for this. ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,105688738 https://github.com/pydata/xarray/issues/567#issuecomment-139239983,https://api.github.com/repos/pydata/xarray/issues/567,139239983,MDEyOklzc3VlQ29tbWVudDEzOTIzOTk4Mw==,950575,2015-09-10T13:50:12Z,2015-09-10T13:50:12Z,CONTRIBUTOR,"How about the function below? (Stolen from [pyaxiom](https://github.com/axiom-data-science/pyaxiom/blob/master/pyaxiom/netcdf/dataset.py#L10-L47).) ``` python def get_variables_by_attributes(ds, strict=False, **kwargs): """""" Returns variables that match specific conditions. * Can pass in key=value parameters and variables are returned that contain all of the matches. ex.: vs = nc.get_variables_by_attributes(axis='X') * Can pass in key=callable parameter and if the callable returns True. The callable should accept a single parameter, the attribute value. None is returned as the attribute valuewhen the attribute does not exist on the variable. ex.: # Get Axis variables vs = nc.get_variables_by_attributes(axis=lambda v: v in ['X', 'Y', 'Z', 'T']) # Get variable that don't have a ""axis"" attribute vs = nc.get_variables_by_attributes(axis=lambda v: v is None) # Get variable that have a ""grid_mapping"" attribute vs = nc.get_variables_by_attributes(axis=lambda v: v is not None) * strict : True/False If True will return only 1 variable if only one is found. Default is False. """""" vs = [] has_value_flag = False for vname, var in ds.iteritems(): for k, v in kwargs.items(): if callable(v): has_value_flag = v(getattr(var, k, None)) if has_value_flag is False: break elif hasattr(var, k) and getattr(var, k) == v: has_value_flag = True else: has_value_flag = False break if has_value_flag is True: vs.append(ds[vname]) if strict: if len(vs) == 1: vs = vs[0] else: msg = ""Expected only one variable. Got {!r}"".format raise ValueError(msg(vs)) return vs ``` See it in action [here](http://nbviewer.ipython.org/gist/ocefpaf/1633cb2f61b61db35ad0). ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,105688738 https://github.com/pydata/xarray/issues/567#issuecomment-139055592,https://api.github.com/repos/pydata/xarray/issues/567,139055592,MDEyOklzc3VlQ29tbWVudDEzOTA1NTU5Mg==,1872600,2015-09-09T21:48:02Z,2015-09-09T21:48:02Z,NONE,"I was thinking that the data variables that matched a specified `standard_name` would be a subset of the variables in the `data_vars` object. ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,105688738 https://github.com/pydata/xarray/issues/567#issuecomment-139053466,https://api.github.com/repos/pydata/xarray/issues/567,139053466,MDEyOklzc3VlQ29tbWVudDEzOTA1MzQ2Ng==,1217238,2015-09-09T21:38:54Z,2015-09-09T21:38:54Z,MEMBER,"I would probably make this return an xray.Dataset object instead of a plain dict, but otherwise this looks about right: ``` python def get_std_name_vars(ds,std_name): return ds[[k for k, v in ds.data_vars.iteritems() if 'standard_name' in v.attrs and std_name in v.standard_name]] ``` I don't think there's a better way to do this currently. Hypothetically, we could add this to a CF-specific API for xray, e.g., as discussed in #461. ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,105688738