diff --git a/extra_tests/snippets/builtin_dict.py b/extra_tests/snippets/builtin_dict.py index f240b431d..d041a6fcb 100644 --- a/extra_tests/snippets/builtin_dict.py +++ b/extra_tests/snippets/builtin_dict.py @@ -36,4 +36,15 @@ assert ('a') not in d.items() assert ('a', 123) in d.items() assert ('b', 456) in d.items() assert ('a', 123, 3) not in d.items() -assert ('a', 123, 'b', 456) not in d.items() \ No newline at end of file +assert ('a', 123, 'b', 456) not in d.items() + +d = {1: 10, "a": "ABC", (3,4): 5} +assert 1 in d.keys() +assert (1) in d.keys() +assert "a" in d.keys() +assert (3,4) in d.keys() +assert () not in d.keys() +assert 10 not in d.keys() +assert (1, 10) not in d.keys() +assert "abc" not in d.keys() +assert ((3,4),5) not in d.keys() \ No newline at end of file diff --git a/vm/src/builtins/dict.rs b/vm/src/builtins/dict.rs index 988534429..2cd368dd9 100644 --- a/vm/src/builtins/dict.rs +++ b/vm/src/builtins/dict.rs @@ -956,7 +956,12 @@ trait ViewSetOps: DictView { impl ViewSetOps for PyDictKeys {} #[pyimpl(with(DictView, Comparable, Iterable, ViewSetOps))] -impl PyDictKeys {} +impl PyDictKeys { + #[pymethod(magic)] + fn contains(zelf: PyRef, key: PyObjectRef, vm: &VirtualMachine) -> PyResult { + zelf.dict().contains(key, vm) + } +} impl ViewSetOps for PyDictItems {} #[pyimpl(with(DictView, Comparable, Iterable, ViewSetOps))]