Replaced .keys() with dictionary iterators
diff --git a/Lib/pstats.py b/Lib/pstats.py
index 384db52..d36dc9e 100644
--- a/Lib/pstats.py
+++ b/Lib/pstats.py
@@ -142,7 +142,7 @@
         self.total_calls += other.total_calls
         self.prim_calls += other.prim_calls
         self.total_tt += other.total_tt
-        for func in other.top_level.keys():
+        for func in other.top_level:
             self.top_level[func] = None
 
         if self.max_name_len < other.max_name_len:
@@ -150,12 +150,12 @@
 
         self.fcn_list = None
 
-        for func in other.stats.keys():
+        for func, stat in other.stats.iteritems():
             if func in self.stats:
                 old_func_stat = self.stats[func]
             else:
                 old_func_stat = (0, 0, 0, 0, {},)
-            self.stats[func] = add_func_stats(old_func_stat, other.stats[func])
+            self.stats[func] = add_func_stats(old_func_stat, stat)
         return self
 
     # list the tuple indices and directions for sorting,
@@ -178,7 +178,7 @@
         if not self.sort_arg_dict:
             self.sort_arg_dict = dict = {}
             bad_list = {}
-            for word in self.sort_arg_dict_default.keys():
+            for word, tup in self.sort_arg_dict_default.iteritems():
                 fragment = word
                 while fragment:
                     if not fragment:
@@ -186,9 +186,9 @@
                     if fragment in dict:
                         bad_list[fragment] = 0
                         break
-                    dict[fragment] = self.sort_arg_dict_default[word]
+                    dict[fragment] = tup
                     fragment = fragment[:-1]
-            for word in bad_list.keys():
+            for word in bad_list:
                 del dict[word]
         return self.sort_arg_dict
 
@@ -213,8 +213,7 @@
             connector = ", "
 
         stats_list = []
-        for func in self.stats.keys():
-            cc, nc, tt, ct, callers = self.stats[func]
+        for func, (cc, nc, tt, ct, callers) in self.stats.iteritems():
             stats_list.append((cc, nc, tt, ct) + func +
                               (func_std_string(func), func))
 
@@ -234,14 +233,13 @@
         oldstats = self.stats
         self.stats = newstats = {}
         max_name_len = 0
-        for func in oldstats.keys():
-            cc, nc, tt, ct, callers = oldstats[func]
+        for func, (cc, nc, tt, ct, callers) in oldstats.iteritems():
             newfunc = func_strip_path(func)
             if len(func_std_string(newfunc)) > max_name_len:
                 max_name_len = len(func_std_string(newfunc))
             newcallers = {}
-            for func2 in callers.keys():
-                newcallers[func_strip_path(func2)] = callers[func2]
+            for func2, caller in callers.iteritems():
+                newcallers[func_strip_path(func2)] = caller
 
             if newfunc in newstats:
                 newstats[newfunc] = add_func_stats(
@@ -251,7 +249,7 @@
                 newstats[newfunc] = (cc, nc, tt, ct, newcallers)
         old_top = self.top_level
         self.top_level = new_top = {}
-        for func in old_top.keys():
+        for func in old_top:
             new_top[func_strip_path(func)] = None
 
         self.max_name_len = max_name_len
@@ -263,14 +261,13 @@
     def calc_callees(self):
         if self.all_callees: return
         self.all_callees = all_callees = {}
-        for func in self.stats.keys():
+        for func, (cc, nc, tt, ct, callers) in self.stats.iteritems():
             if not func in all_callees:
                 all_callees[func] = {}
-            cc, nc, tt, ct, callers = self.stats[func]
-            for func2 in callers.keys():
+            for func2, caller in callers.iteritems():
                 if not func2 in all_callees:
                     all_callees[func2] = {}
-                all_callees[func2][func]  = callers[func2]
+                all_callees[func2][func]  = caller
         return
 
     #******************************************************************
@@ -330,7 +327,7 @@
             print filename
         if self.files: print
         indent = ' ' * 8
-        for func in self.top_level.keys():
+        for func in self.top_level:
             print indent, func_get_function_name(func)
 
         print indent, self.total_calls, "function calls",
@@ -468,20 +465,20 @@
 def add_callers(target, source):
     """Combine two caller lists in a single list."""
     new_callers = {}
-    for func in target.keys():
-        new_callers[func] = target[func]
-    for func in source.keys():
+    for func, caller in target.iteritems():
+        new_callers[func] = caller
+    for func, caller in source.iteritems():
         if func in new_callers:
-            new_callers[func] = source[func] + new_callers[func]
+            new_callers[func] = caller + new_callers[func]
         else:
-            new_callers[func] = source[func]
+            new_callers[func] = caller
     return new_callers
 
 def count_calls(callers):
     """Sum the caller statistics to get total number of calls received."""
     nc = 0
-    for func in callers.keys():
-        nc += callers[func]
+    for calls in callers.itervalues():
+        nc += calls
     return nc
 
 #**************************************************************************
@@ -595,19 +592,19 @@
             print "Reverse the sort order of the profiling report."
 
         def do_sort(self, line):
-            abbrevs = self.stats.get_sort_arg_defs().keys()
+            abbrevs = self.stats.get_sort_arg_defs()
             if line and not filter(lambda x,a=abbrevs: x not in a,line.split()):
                 apply(self.stats.sort_stats, line.split())
             else:
                 print "Valid sort keys (unique prefixes are accepted):"
-                for (key, value) in Stats.sort_arg_dict_default.items():
+                for (key, value) in Stats.sort_arg_dict_default.iteritems():
                     print "%s -- %s" % (key, value[1])
             return 0
         def help_sort(self):
             print "Sort profile data according to specified keys."
             print "(Typing `sort' without arguments lists valid keys.)"
         def complete_sort(self, text, *args):
-            return [a for a in Stats.sort_arg_dict_default.keys() if a.startswith(text)]
+            return [a for a in Stats.sort_arg_dict_default if a.startswith(text)]
 
         def do_stats(self, line):
             return self.generic('print_stats', line)