[subset] 2to3 --fix=dict with manual cleanup
diff --git a/Lib/fontTools/subset.py b/Lib/fontTools/subset.py
index e4a3785..4f41b24 100644
--- a/Lib/fontTools/subset.py
+++ b/Lib/fontTools/subset.py
@@ -68,25 +68,25 @@
   "Returns ascending list of matching class values."
   return _uniq_sort(
      ([0] if any(g not in self.classDefs for g in glyphs) else []) +
-      [v for g,v in self.classDefs.iteritems() if g in glyphs])
+      [v for g,v in self.classDefs.items() if g in glyphs])
 
 @_add_method(otTables.ClassDef)
 def intersect_class(self, glyphs, klass):
   "Returns set of glyphs matching class."
   if klass == 0:
     return set(g for g in glyphs if g not in self.classDefs)
-  return set(g for g,v in self.classDefs.iteritems()
+  return set(g for g,v in self.classDefs.items()
               if v == klass and g in glyphs)
 
 @_add_method(otTables.ClassDef)
 def subset(self, glyphs, remap=False):
   "Returns ascending list of remaining classes."
-  self.classDefs = dict((g,v) for g,v in self.classDefs.iteritems() if g in glyphs)
+  self.classDefs = dict((g,v) for g,v in self.classDefs.items() if g in glyphs)
   # Note: while class 0 has the special meaning of "not matched",
   # if no glyph will ever /not match/, we can optimize class 0 out too.
   indices = _uniq_sort(
      ([0] if any(g not in self.classDefs for g in glyphs) else []) +
-      self.classDefs.values())
+      list(self.classDefs.values()))
   if remap:
     self.remap(indices)
   return indices
@@ -95,20 +95,20 @@
 def remap(self, class_map):
   "Remaps classes."
   self.classDefs = dict((g,class_map.index(v))
-                         for g,v in self.classDefs.iteritems())
+                         for g,v in self.classDefs.items())
 
 @_add_method(otTables.SingleSubst)
 def closure_glyphs(self, s, cur_glyphs=None):
   if cur_glyphs == None: cur_glyphs = s.glyphs
   if self.Format in [1, 2]:
-    s.glyphs.update(v for g,v in self.mapping.iteritems() if g in cur_glyphs)
+    s.glyphs.update(v for g,v in self.mapping.items() if g in cur_glyphs)
   else:
     assert 0, "unknown format: %s" % self.Format
 
 @_add_method(otTables.SingleSubst)
 def subset_glyphs(self, s):
   if self.Format in [1, 2]:
-    self.mapping = dict((g,v) for g,v in self.mapping.iteritems()
+    self.mapping = dict((g,v) for g,v in self.mapping.items()
                         if g in s.glyphs and v in s.glyphs)
     return bool(self.mapping)
   else:
@@ -142,7 +142,7 @@
 def closure_glyphs(self, s, cur_glyphs=None):
   if cur_glyphs == None: cur_glyphs = s.glyphs
   if self.Format == 1:
-    _set_update(s.glyphs, *(vlist for g,vlist in self.alternates.iteritems()
+    _set_update(s.glyphs, *(vlist for g,vlist in self.alternates.items()
                             if g in cur_glyphs))
   else:
     assert 0, "unknown format: %s" % self.Format
@@ -151,7 +151,7 @@
 def subset_glyphs(self, s):
   if self.Format == 1:
     self.alternates = dict((g,vlist)
-                           for g,vlist in self.alternates.iteritems()
+                           for g,vlist in self.alternates.items()
                            if g in s.glyphs and
                               all(v in s.glyphs for v in vlist))
     return bool(self.alternates)
@@ -164,7 +164,7 @@
   if self.Format == 1:
     _set_update(s.glyphs, *([seq.LigGlyph for seq in seqs
                              if all(c in s.glyphs for c in seq.Component)]
-                            for g,seqs in self.ligatures.iteritems()
+                            for g,seqs in self.ligatures.items()
                             if g in cur_glyphs))
   else:
     assert 0, "unknown format: %s" % self.Format
@@ -172,13 +172,13 @@
 @_add_method(otTables.LigatureSubst)
 def subset_glyphs(self, s):
   if self.Format == 1:
-    self.ligatures = dict((g,v) for g,v in self.ligatures.iteritems()
+    self.ligatures = dict((g,v) for g,v in self.ligatures.items()
                           if g in s.glyphs)
     self.ligatures = dict((g,[seq for seq in seqs
                               if seq.LigGlyph in s.glyphs and
                                  all(c in s.glyphs for c in seq.Component)])
-                           for g,seqs in self.ligatures.iteritems())
-    self.ligatures = dict((g,v) for g,v in self.ligatures.iteritems() if v)
+                           for g,seqs in self.ligatures.items())
+    self.ligatures = dict((g,v) for g,v in self.ligatures.items() if v)
     return bool(self.ligatures)
   else:
     assert 0, "unknown format: %s" % self.Format
@@ -1091,12 +1091,12 @@
   if table.MarkAttachClassDef:
     table.MarkAttachClassDef.classDefs = dict((g,v) for g,v in
                                               table.MarkAttachClassDef.
-                                                classDefs.iteritems()
+                                                classDefs.items()
                                               if g in glyphs)
   if table.GlyphClassDef:
     table.GlyphClassDef.classDefs = dict((g,v) for g,v in
                                          table.GlyphClassDef.
-                                           classDefs.iteritems()
+                                           classDefs.items()
                                          if g in glyphs)
   if table.AttachList:
     indices = table.AttachList.Coverage.subset(glyphs)
@@ -1144,30 +1144,30 @@
 def subset_glyphs(self, s):
   glyphs = s.glyphs_gsubed
   for t in self.kernTables:
-    t.kernTable = dict(((a,b),v) for (a,b),v in t.kernTable.iteritems()
+    t.kernTable = dict(((a,b),v) for (a,b),v in t.kernTable.items()
                        if a in glyphs and b in glyphs)
   self.kernTables = [t for t in self.kernTables if t.kernTable]
   return bool(self.kernTables)
 
 @_add_method(ttLib.getTableClass('vmtx'))
 def subset_glyphs(self, s):
-  self.metrics = dict((g,v) for g,v in self.metrics.iteritems() if g in s.glyphs)
+  self.metrics = dict((g,v) for g,v in self.metrics.items() if g in s.glyphs)
   return bool(self.metrics)
 
 @_add_method(ttLib.getTableClass('hmtx'))
 def subset_glyphs(self, s):
-  self.metrics = dict((g,v) for g,v in self.metrics.iteritems() if g in s.glyphs)
+  self.metrics = dict((g,v) for g,v in self.metrics.items() if g in s.glyphs)
   return True # Required table
 
 @_add_method(ttLib.getTableClass('hdmx'))
 def subset_glyphs(self, s):
-  self.hdmx = dict((sz,dict((g,v) for g,v in l.iteritems() if g in s.glyphs))
-                   for sz,l in self.hdmx.iteritems())
+  self.hdmx = dict((sz,dict((g,v) for g,v in l.items() if g in s.glyphs))
+                   for sz,l in self.hdmx.items())
   return bool(self.hdmx)
 
 @_add_method(ttLib.getTableClass('VORG'))
 def subset_glyphs(self, s):
-  self.VOriginRecords = dict((g,v) for g,v in self.VOriginRecords.iteritems()
+  self.VOriginRecords = dict((g,v) for g,v in self.VOriginRecords.items()
                              if g in s.glyphs)
   self.numVertOriginYMetrics = len(self.VOriginRecords)
   return True  # Never drop; has default metrics
@@ -1238,9 +1238,9 @@
 
 @_add_method(ttLib.getTableClass('glyf'))
 def subset_glyphs(self, s):
-  self.glyphs = dict((g,v) for g,v in self.glyphs.iteritems() if g in s.glyphs)
+  self.glyphs = dict((g,v) for g,v in self.glyphs.items() if g in s.glyphs)
   indices = [i for i,g in enumerate(self.glyphOrder) if g in s.glyphs]
-  for v in self.glyphs.itervalues():
+  for v in self.glyphs.values():
     if hasattr(v, "data"):
       v.remapComponentsFast(indices)
     else:
@@ -1252,7 +1252,7 @@
 @_add_method(ttLib.getTableClass('glyf'))
 def prune_post_subset(self, options):
   if not options.hinting:
-    for v in self.glyphs.itervalues():
+    for v in self.glyphs.values():
       v.removeHinting()
   return True
 
@@ -1295,11 +1295,11 @@
         sel.format = None
         sel.gidArray = [sel.gidArray[i] for i in indices]
       cs.charStrings = dict((g,indices.index(v))
-                            for g,v in cs.charStrings.iteritems()
+                            for g,v in cs.charStrings.items()
                             if g in s.glyphs)
     else:
       cs.charStrings = dict((g,v)
-                            for g,v in cs.charStrings.iteritems()
+                            for g,v in cs.charStrings.items()
                             if g in s.glyphs)
     font.charset = [g for g in font.charset if g in s.glyphs]
     font.numGlyphs = len(font.charset)
@@ -1673,10 +1673,10 @@
     if t.format == 14:
       # TODO(behdad) XXX We drop all the default-UVS mappings(g==None).
       t.uvsDict = dict((v,[(u,g) for u,g in l if g in s.glyphs])
-                       for v,l in t.uvsDict.iteritems())
-      t.uvsDict = dict((v,l) for v,l in t.uvsDict.iteritems() if l)
+                       for v,l in t.uvsDict.items())
+      t.uvsDict = dict((v,l) for v,l in t.uvsDict.items() if l)
     else:
-      t.cmap = dict((u,g) for u,g in t.cmap.iteritems()
+      t.cmap = dict((u,g) for u,g in t.cmap.items()
                     if g in s.glyphs_requested or u in s.unicodes_requested)
   self.tables = [t for t in self.tables
                  if (t.cmap if t.format != 14 else t.uvsDict)]
@@ -1740,7 +1740,7 @@
               'abvs', 'blws', 'psts', 'haln', 'dist', 'abvm', 'blwm'],
   }
   _layout_features_default = _uniq_sort(sum(
-      _layout_features_groups.itervalues(), []))
+      iter(_layout_features_groups.values()), []))
 
   drop_tables = _drop_tables_default
   no_subset_tables = _no_subset_tables_default
@@ -1765,7 +1765,7 @@
     self.set(**kwargs)
 
   def set(self, **kwargs):
-    for k,v in kwargs.iteritems():
+    for k,v in kwargs.items():
       if not hasattr(self, k):
         raise self.UnknownOptionError("Unknown option '%s'" % k)
       setattr(self, k, v)