Replaced .keys() with dictionary iterators
diff --git a/Lib/copy.py b/Lib/copy.py
index 21be6bc..0180554 100644
--- a/Lib/copy.py
+++ b/Lib/copy.py
@@ -234,8 +234,8 @@
 def _deepcopy_dict(x, memo):
     y = {}
     memo[id(x)] = y
-    for key in x.keys():
-        y[deepcopy(key, memo)] = deepcopy(x[key], memo)
+    for key, value in x.iteritems():
+        y[deepcopy(key, memo)] = deepcopy(value, memo)
     return y
 d[types.DictionaryType] = _deepcopy_dict
 if PyStringMap is not None:
@@ -335,8 +335,8 @@
         def __getstate__(self):
             return {'a': self.a, 'arg': self.arg}
         def __setstate__(self, state):
-            for key in state.keys():
-                setattr(self, key, state[key])
+            for key, value in state.iteritems():
+                setattr(self, key, value)
         def __deepcopy__(self, memo = None):
             new = self.__class__(deepcopy(self.arg, memo))
             new.a = self.a
diff --git a/Lib/filecmp.py b/Lib/filecmp.py
index 9aee1b3..03c2ea3 100644
--- a/Lib/filecmp.py
+++ b/Lib/filecmp.py
@@ -228,8 +228,8 @@
 
     def phase4_closure(self): # Recursively call phase4() on subdirectories
         self.phase4()
-        for x in self.subdirs.keys():
-            self.subdirs[x].phase4_closure()
+        for sd in self.subdirs.itervalues():
+            sd.phase4_closure()
 
     def report(self): # Print a report on the differences between a and b
         # Output format is purposely lousy
@@ -258,15 +258,15 @@
 
     def report_partial_closure(self): # Print reports on self and on subdirs
         self.report()
-        for x in self.subdirs.keys():
+        for sd in self.subdirs.itervalues():
             print
-            self.subdirs[x].report()
+            sd.report()
 
     def report_full_closure(self): # Report on self and subdirs recursively
         self.report()
-        for x in self.subdirs.keys():
+        for sd in self.subdirs.itervalues():
             print
-            self.subdirs[x].report_full_closure()
+            sd.report_full_closure()
 
 
 def cmpfiles(a, b, common, shallow=1, use_statcache=0):
diff --git a/Lib/inspect.py b/Lib/inspect.py
index e40ec8d..fdbe16a 100644
--- a/Lib/inspect.py
+++ b/Lib/inspect.py
@@ -553,7 +553,7 @@
                 if unique and parent in classes: break
         elif c not in roots:
             roots.append(c)
-    for parent in children.keys():
+    for parent in children:
         if parent not in classes:
             roots.append(parent)
     return walktree(roots, children, None)
diff --git a/Lib/mailcap.py b/Lib/mailcap.py
index b8ed759..b2ddacd 100644
--- a/Lib/mailcap.py
+++ b/Lib/mailcap.py
@@ -24,11 +24,11 @@
             continue
         morecaps = readmailcapfile(fp)
         fp.close()
-        for key in morecaps.keys():
+        for key, value in morecaps.iteritems():
             if not key in caps:
-                caps[key] = morecaps[key]
+                caps[key] = value
             else:
-                caps[key] = caps[key] + morecaps[key]
+                caps[key] = caps[key] + value
     return caps
 
 def listmailcapfiles():
diff --git a/Lib/profile.py b/Lib/profile.py
index c1001f9..c667db2 100755
--- a/Lib/profile.py
+++ b/Lib/profile.py
@@ -386,12 +386,11 @@
 
     def snapshot_stats(self):
         self.stats = {}
-        for func in self.timings.keys():
-            cc, ns, tt, ct, callers = self.timings[func]
+        for func, (cc, ns, tt, ct, callers) in self.timings.iteritems():
             callers = callers.copy()
             nc = 0
-            for func_caller in callers.keys():
-                nc = nc + callers[func_caller]
+            for callcnt in callers.itervalues():
+                nc += callcnt
             self.stats[func] = cc, nc, tt, ct, callers
 
 
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)
diff --git a/Lib/pyclbr.py b/Lib/pyclbr.py
index 29b8354..fad46ad 100644
--- a/Lib/pyclbr.py
+++ b/Lib/pyclbr.py
@@ -324,7 +324,7 @@
                     # Python does internally)
                     # also don't add names that
                     # start with _
-                    for n in d.keys():
+                    for n in d:
                         if n[0] != '_' and \
                            not n in dict:
                             dict[n] = d[n]
diff --git a/Lib/rlcompleter.py b/Lib/rlcompleter.py
index d8208f3..3075a14 100644
--- a/Lib/rlcompleter.py
+++ b/Lib/rlcompleter.py
@@ -104,8 +104,8 @@
         matches = []
         n = len(text)
         for list in [keyword.kwlist,
-                     __builtin__.__dict__.keys(),
-                     self.namespace.keys()]:
+                     __builtin__.__dict__,
+                     self.namespace]:
             for word in list:
                 if word[:n] == text and word != "__builtins__":
                     matches.append(word)
diff --git a/Lib/symtable.py b/Lib/symtable.py
index 4498335..38042ae 100644
--- a/Lib/symtable.py
+++ b/Lib/symtable.py
@@ -163,7 +163,7 @@
             d = {}
             for st in self._table.children:
                 d[st.name] = 1
-            self.__methods = tuple(d.keys())
+            self.__methods = tuple(d)
         return self.__methods
 
 class Symbol: