diff --git a/dateutil/parser/_parser.py b/dateutil/parser/_parser.py
index 171626906013db217843f0b8004d8ca878edc176_ZGF0ZXV0aWwvcGFyc2VyL19wYXJzZXIucHk=..6b0fc9b73d6aee07821740dfe3d260b08fdc2790_ZGF0ZXV0aWwvcGFyc2VyL19wYXJzZXIucHk= 100644
--- a/dateutil/parser/_parser.py
+++ b/dateutil/parser/_parser.py
@@ -458,8 +458,8 @@
                 raise ValueError('Year is already set')
             self.ystridx = len(self) - 1
 
-    def _resolve_from_stridxs(self):
+    def _resolve_from_stridxs(self, strids):
         """
         Try to resolve the identities of year/month/day elements using
         ystridx, mstridx, and dstridx, if enough of these are specified.
         """
@@ -462,10 +462,7 @@
         """
         Try to resolve the identities of year/month/day elements using
         ystridx, mstridx, and dstridx, if enough of these are specified.
         """
-        strids = {'y': self.ystridx, 'm': self.mstridx, 'd': self.dstridx}
-        strids = {key: strids[key] for key in strids if strids[key] is not None}
-
         if len(self) == 3 and len(strids) == 2:
             # we can back out the remaining stridx value
             missing = [x for x in range(3) if x not in strids.values()]
@@ -476,11 +473,10 @@
             strids[key] = val
 
         assert len(self) == len(strids)  # otherwise this should not be called
-        out = {'y': None, 'm': None, 'd': None}
-        out.update({key: self[strids[key]] for key in strids})
-        return (out['y'], out['m'], out['d'])
+        out = {key: self[strids[key]] for key in strids}
+        return (out.get('y'), out.get('m'), out.get('d'))
 
     def resolve_ymd(self, yearfirst, dayfirst):
         len_ymd = len(self)
         year, month, day = (None, None, None)
 
@@ -482,9 +478,12 @@
 
     def resolve_ymd(self, yearfirst, dayfirst):
         len_ymd = len(self)
         year, month, day = (None, None, None)
 
-        strids = {'y': self.ystridx, 'm': self.mstridx, 'd': self.dstridx}
-        strids = {key: strids[key] for key in strids if strids[key] is not None}
+        strids = (('y', self.ystridx),
+                  ('m', self.mstridx),
+                  ('d', self.dstridx))
+
+        strids = {key: val for key, val in strids if val is not None}
         if (len(self) == len(strids) > 0 or
                 (len(self) == 3 and len(strids) == 2)):
@@ -489,6 +488,6 @@
         if (len(self) == len(strids) > 0 or
                 (len(self) == 3 and len(strids) == 2)):
-            return self._resolve_from_stridxs()
+            return self._resolve_from_stridxs(strids)
 
         mstridx = self.mstridx