Issue #23971:  Fix underestimated presizing in dict.fromkeys()
diff --git a/Misc/NEWS b/Misc/NEWS
index 39de420..bd20dba 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -25,6 +25,8 @@
 - Issue #20274: When calling a _sqlite.Connection, it now complains if passed
   any keyword arguments.  Previously it silently ignored them.
 
+- Issue #23971:  Fix underestimated presizing in dict.fromkeys().
+
 - Issue #20274: Remove ignored and erroneous "kwargs" parameters from three
   METH_VARARGS methods on _sqlite.Connection.
 
diff --git a/Objects/dictobject.c b/Objects/dictobject.c
index 39e7035..50afa3f 100644
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -1361,7 +1361,7 @@
             PyObject *key;
             long hash;
 
-            if (dictresize(mp, Py_SIZE(seq))) {
+            if (dictresize(mp, Py_SIZE(seq) / 2 * 3)) {
                 Py_DECREF(d);
                 return NULL;
             }
@@ -1382,7 +1382,7 @@
             PyObject *key;
             long hash;
 
-            if (dictresize(mp, PySet_GET_SIZE(seq))) {
+            if (dictresize(mp, PySet_GET_SIZE(seq) / 2 * 3)) {
                 Py_DECREF(d);
                 return NULL;
             }