diff --git a/include/pybind11/cast.h b/include/pybind11/cast.h
index 1101178..3c39841 100644
--- a/include/pybind11/cast.h
+++ b/include/pybind11/cast.h
@@ -1148,6 +1148,10 @@
     return result;
 }
 
+template <typename... Args, typename /*SFINAE*/>
+dict::dict(Args &&...args)
+    : dict(detail::unpacking_collector<>(std::forward<Args>(args)...).kwargs()) { }
+
 #define PYBIND11_MAKE_OPAQUE(Type) \
     namespace pybind11 { namespace detail { \
         template<> class type_caster<Type> : public type_caster_base<Type> { }; \
diff --git a/include/pybind11/pytypes.h b/include/pybind11/pytypes.h
index 374f542..e25f1a7 100644
--- a/include/pybind11/pytypes.h
+++ b/include/pybind11/pytypes.h
@@ -589,6 +589,9 @@
     dict() : object(PyDict_New(), false) {
         if (!m_ptr) pybind11_fail("Could not allocate dict object!");
     }
+    template <typename... Args,
+              typename = detail::enable_if_t<detail::all_of_t<detail::is_keyword_or_ds, Args...>::value>>
+    dict(Args &&...args);
     size_t size() const { return (size_t) PyDict_Size(m_ptr); }
     detail::dict_iterator begin() const { return (++detail::dict_iterator(*this, 0)); }
     detail::dict_iterator end() const { return detail::dict_iterator(); }
diff --git a/tests/test_callbacks.cpp b/tests/test_callbacks.cpp
index bfb9326..31d4e39 100644
--- a/tests/test_callbacks.cpp
+++ b/tests/test_callbacks.cpp
@@ -89,12 +89,9 @@
     });
 
     m.def("test_dict_unpacking", [](py::function f) {
-        auto d1 = py::dict();
-        d1["key"] = py::cast("value");
-        d1["a"] = py::cast(1);
+        auto d1 = py::dict("key"_a="value", "a"_a=1);
         auto d2 = py::dict();
-        auto d3 = py::dict();
-        d3["b"] = py::cast(2);
+        auto d3 = py::dict("b"_a=2);
         return f("positional", 1, **d1, **d2, **d3);
     });
 
@@ -104,30 +101,24 @@
 
     m.def("test_unpacking_and_keywords1", [](py::function f) {
         auto args = py::make_tuple(2);
-        auto kwargs = py::dict();
-        kwargs["d"] = py::cast(4);
+        auto kwargs = py::dict("d"_a=4);
         return f(1, *args, "c"_a=3, **kwargs);
     });
 
     m.def("test_unpacking_and_keywords2", [](py::function f) {
-        auto kwargs1 = py::dict();
-        kwargs1["a"] = py::cast(1);
-        auto kwargs2 = py::dict();
-        kwargs2["c"] = py::cast(3);
-        kwargs2["d"] = py::cast(4);
+        auto kwargs1 = py::dict("a"_a=1);
+        auto kwargs2 = py::dict("c"_a=3, "d"_a=4);
         return f("positional", *py::make_tuple(1), 2, *py::make_tuple(3, 4), 5,
                  "key"_a="value", **kwargs1, "b"_a=2, **kwargs2, "e"_a=5);
     });
 
     m.def("test_unpacking_error1", [](py::function f) {
-        auto kwargs = py::dict();
-        kwargs["x"] = py::cast(3);
+        auto kwargs = py::dict("x"_a=3);
         return f("x"_a=1, "y"_a=2, **kwargs); // duplicate ** after keyword
     });
 
     m.def("test_unpacking_error2", [](py::function f) {
-        auto kwargs = py::dict();
-        kwargs["x"] = py::cast(3);
+        auto kwargs = py::dict("x"_a=3);
         return f(**kwargs, "x"_a=1); // duplicate keyword after **
     });
 
diff --git a/tests/test_python_types.cpp b/tests/test_python_types.cpp
index 1b462ab..e527c0a 100644
--- a/tests/test_python_types.cpp
+++ b/tests/test_python_types.cpp
@@ -219,4 +219,10 @@
         auto s2 = "{a} + {b} = {c}"_s.format("a"_a=1, "b"_a=2, "c"_a=3);
         return py::make_tuple(s1, s2);
     });
+
+    m.def("test_dict_keyword_constructor", []() {
+        auto d1 = py::dict("x"_a=1, "y"_a=2);
+        auto d2 = py::dict("z"_a=3, **d1);
+        return d2;
+    });
 });
diff --git a/tests/test_python_types.py b/tests/test_python_types.py
index 3696069..087a9a2 100644
--- a/tests/test_python_types.py
+++ b/tests/test_python_types.py
@@ -242,3 +242,9 @@
     s1, s2 = test_str_format()
     assert s1 == "1 + 2 = 3"
     assert s1 == s2
+
+
+def test_dict_api():
+    from pybind11_tests import test_dict_keyword_constructor
+
+    assert test_dict_keyword_constructor() == {"x": 1, "y": 2, "z": 3}
