diff --git a/benedict/core/keylists.py b/benedict/core/keylists.py index b0787b1f..fca09d1f 100644 --- a/benedict/core/keylists.py +++ b/benedict/core/keylists.py @@ -37,7 +37,7 @@ def _get_keylist_for_value( ) -> list[list[Any]]: if type_util.is_dict(value): return _get_keylist_for_dict(value, parent_keys, indexes) - elif type_util.is_list(value) and indexes: + elif type_util.is_list_or_tuple(value) and indexes: return _get_keylist_for_list(value, parent_keys, indexes) return [] diff --git a/tests/core/test_keypaths.py b/tests/core/test_keypaths.py index 043da786..602e328a 100644 --- a/tests/core/test_keypaths.py +++ b/tests/core/test_keypaths.py @@ -303,3 +303,20 @@ def test_keypaths_with_nested_lists_and_indexes_included(self) -> None: "a.b[2][0].y", ] self.assertEqual(o, r) + + def test_keypaths_with_tuple_indexes(self) -> None: + data = {"items": ({"value": 1}, (2, 3), [4])} + self.assertEqual( + _keypaths(data, indexes=True), + [ + "items", + "items[0]", + "items[0].value", + "items[1]", + "items[1][0]", + "items[1][1]", + "items[2]", + "items[2][0]", + ], + ) + self.assertEqual(_keypaths(data, indexes=False), ["items"]) diff --git a/tests/core/test_match.py b/tests/core/test_match.py index 08bc9123..c6c97629 100644 --- a/tests/core/test_match.py +++ b/tests/core/test_match.py @@ -3,6 +3,7 @@ import re import unittest +from benedict import benedict from benedict.core import match as _match @@ -72,3 +73,8 @@ def test_match_with_invalid_pattern(self) -> None: d = self._get_dict() with self.assertRaises(ValueError): _ = _match(d, 100) # type: ignore[arg-type] + + def test_match_with_tuple_indexes(self) -> None: + data = benedict({"items": ({"value": 1}, {"value": 2})}) + self.assertEqual(data["items[0].value"], 1) + self.assertEqual(data.match("items[*].value"), [1, 2])