d = {'a': 1, 'b': 2}
         self.assertEqual(vnfdgen.deepgetitem(d, "a"), 1)
 
+    def test_dict_flatten_str_int_key_first(self):
+        d = {'0': 1, 0: 24, 'b': 2}
+        self.assertEqual(vnfdgen.deepgetitem(d, "0"), 1)
+
+    def test_dict_flatten_int_key_fallback(self):
+        d = {0: 1, 'b': 2}
+        self.assertEqual(vnfdgen.deepgetitem(d, "0"), 1)
+
     def test_dict_flatten_list(self):
         d = {'a': 1, 'b': list(range(2))}
         self.assertEqual(vnfdgen.deepgetitem(d, "b.0"), 0)
         d = {'a': 1, 'b': {x: x for x in list(range(2))}}
         self.assertEqual(vnfdgen.deepgetitem(d, "b.0"), 0)
 
+    def test_dict_flatten_only_str_key(self):
+        d = {'0': 1, 0: 24, 'b': 2}
+        self.assertRaises(AttributeError, vnfdgen.deepgetitem, d, 0)
+
+
     def test_generate_tp_single_var(self):
         """ Function to verify traffic profile generation with imix """
 
 
 
     add try_int to work with sequences
 
-    >>> d = {'snl_final': {'about': {'_icsd': {'icsd_id': 1, 'fr': [2, 3]}}}}
+    >>> d = {'snl_final': {'about': {'_icsd': {'icsd_id': 1, 'fr': [2, 3], '0': 24, 0: 4}}}}
     >>> deepgetitem(d, 'snl_final.about._icsd.icsd_id')
     1
     >>> deepgetitem(d, 'snl_final.about._sandbox.sbx_id')
     >>>
     >>> deepgetitem(d, 'snl_final.about._icsd.fr.1')
     3
+    >>> deepgetitem(d, 'snl_final.about._icsd.0')
+    24
     """
     def getitem(obj, name):
-        # if integer then list index
-        name = try_int(name)
+        # try string then convert to int
         try:
             return obj[name]
         except (KeyError, TypeError, IndexError):
-            return default
+            name = try_int(name)
+            try:
+                return obj[name]
+            except (KeyError, TypeError, IndexError):
+                return default
     return reduce(getitem, item.split('.'), obj)