diff --git a/datatree/datatree.py b/datatree/datatree.py index 0e3b348c..8805fb41 100644 --- a/datatree/datatree.py +++ b/datatree/datatree.py @@ -878,7 +878,7 @@ def update(self, other: Dataset | Mapping[str, DataTree | DataArray]) -> None: vars_merge_result = dataset_update_method(self.to_dataset(), new_variables) # TODO are there any subtleties with preserving order of children like this? - merged_children = OrderedDict(**self.children, **new_children) + merged_children = OrderedDict({**self.children, **new_children}) self._replace( inplace=True, children=merged_children, **vars_merge_result._asdict() ) diff --git a/datatree/tests/test_datatree.py b/datatree/tests/test_datatree.py index 0ad1c103..a3343b05 100644 --- a/datatree/tests/test_datatree.py +++ b/datatree/tests/test_datatree.py @@ -235,6 +235,17 @@ def test_update_doesnt_alter_child_name(self): child = dt["a"] assert child.name == "a" + def test_update_overwrite(self): + actual = DataTree.from_dict({"a": DataTree(xr.Dataset({"x": 1}))}) + actual.update({"a": DataTree(xr.Dataset({"x": 2}))}) + + expected = DataTree.from_dict({"a": DataTree(xr.Dataset({"x": 2}))}) + + print(actual) + print(expected) + + dtt.assert_equal(actual, expected) + class TestCopy: def test_copy(self, create_test_datatree):