remove most uses of list(somedict.keys()) in Demo scripts
diff --git a/Demo/cgi/cgi2.py b/Demo/cgi/cgi2.py
index 239fb6b..1d5822c 100755
--- a/Demo/cgi/cgi2.py
+++ b/Demo/cgi/cgi2.py
@@ -14,7 +14,7 @@
         print("<h1>No Form Keys</h1>")
     else:
         print("<h1>Form Keys</h1>")
-        for key in list(form.keys()):
+        for key in form.keys():
             value = form[key].value
             print("<p>", cgi.escape(key), ":", cgi.escape(value))
 
diff --git a/Demo/classes/Dbm.py b/Demo/classes/Dbm.py
index fd73571..ecc117d 100755
--- a/Demo/classes/Dbm.py
+++ b/Demo/classes/Dbm.py
@@ -12,7 +12,7 @@
 
     def __repr__(self):
         s = ''
-        for key in list(self.keys()):
+        for key in self.keys():
             t = repr(key) + ': ' + repr(self[key])
             if s: t = ', ' + t
             s = s + t
@@ -32,7 +32,7 @@
 
     def keys(self):
         res = []
-        for key in list(self.db.keys()):
+        for key in self.db.keys():
             res.append(eval(key))
         return res
 
diff --git a/Demo/metaclasses/Enum.py b/Demo/metaclasses/Enum.py
index 8d402db..eb52d79 100644
--- a/Demo/metaclasses/Enum.py
+++ b/Demo/metaclasses/Enum.py
@@ -42,7 +42,7 @@
         self.__name__ = name
         self.__bases__ = bases
         self.__dict = {}
-        for key, value in list(dict.items()):
+        for key, value in dict.items():
             self.__dict[key] = EnumInstance(name, key, value)
 
     def __getattr__(self, name):
@@ -80,7 +80,7 @@
             s = s + '(' + string.join([x.__name__ for x in self.__bases__], ", ") + ')'
         if self.__dict:
             list = []
-            for key, value in list(self.__dict.items()):
+            for key, value in self.__dict.items():
                 list.append("%s: %s" % (key, int(value)))
             s = "%s: {%s}" % (s, string.join(list, ", "))
         return s
diff --git a/Demo/newmetaclasses/Enum.py b/Demo/newmetaclasses/Enum.py
index 0f7f913..99b6fe8 100644
--- a/Demo/newmetaclasses/Enum.py
+++ b/Demo/newmetaclasses/Enum.py
@@ -20,7 +20,7 @@
     def __init__(cls, name, bases, dict):
         super(EnumMetaclass, cls).__init__(name, bases, dict)
         cls._members = []
-        for attr in list(dict.keys()):
+        for attr in dict.keys():
             if not (attr.startswith('__') and attr.endswith('__')):
                 enumval = EnumInstance(name, attr, dict[attr])
                 setattr(cls, attr, enumval)
diff --git a/Demo/pdist/cmdfw.py b/Demo/pdist/cmdfw.py
index 7bcb461..ec854b1 100755
--- a/Demo/pdist/cmdfw.py
+++ b/Demo/pdist/cmdfw.py
@@ -104,9 +104,7 @@
             c = c.__bases__[0]
         if docstrings:
             print("where subcommand can be:")
-            names = list(docstrings.keys())
-            names.sort()
-            for name in names:
+            for name in sorted(docstrings.keys()):
                 print(docstrings[name])
         if self.PostUsageMessage:
             print(self.PostUsageMessage)
diff --git a/Demo/pdist/cmptree.py b/Demo/pdist/cmptree.py
index d6962e9..1e9f985e 100755
--- a/Demo/pdist/cmptree.py
+++ b/Demo/pdist/cmptree.py
@@ -89,7 +89,7 @@
                 else:
                     print("same mtime but different sum?!?!", end=' ')
                 print()
-    for name in list(lsumdict.keys()):
+    for name in lsumdict.keys():
         if not list(rsumdict.keys()):
             print(repr(name), "only locally", end=' ')
             fl()
diff --git a/Demo/pdist/cvslib.py b/Demo/pdist/cvslib.py
index 8ccb616..78e4fbb 100755
--- a/Demo/pdist/cvslib.py
+++ b/Demo/pdist/cvslib.py
@@ -223,15 +223,12 @@
         f.close()
 
     def getlocalfiles(self):
-        list = list(self.entries.keys())
+        entries_keys = set(self.entries.keys())
         addlist = os.listdir(os.curdir)
         for name in addlist:
-            if name in list:
-                continue
             if not self.ignored(name):
-                list.append(name)
-        list.sort()
-        for file in list:
+                entries_keys.add(name)
+        for file in sorted(entries_keys):
             try:
                 e = self.entries[file]
             except KeyError:
@@ -257,19 +254,17 @@
         print('-'*50)
 
     def keys(self):
-        keys = list(self.entries.keys())
-        keys.sort()
-        return keys
+        return sorted(self.entries.keys())
 
     def values(self):
         def value(key, self=self):
             return self.entries[key]
-        return list(map(value, list(self.keys())))
+        return [value(k) for k in self.keys()]
 
     def items(self):
         def item(key, self=self):
             return (key, self.entries[key])
-        return list(map(item, list(self.keys())))
+        return [item(k) for k in self.keys()]
 
     def cvsexists(self, file):
         file = os.path.join("CVS", file)
diff --git a/Demo/pdist/rrcs.py b/Demo/pdist/rrcs.py
index 8d0ef03..647ecc5 100755
--- a/Demo/pdist/rrcs.py
+++ b/Demo/pdist/rrcs.py
@@ -71,11 +71,9 @@
     x.unlock(fn)
 
 def info(x, copts, fn):
-    dict = x.info(fn)
-    keys = list(dict.keys())
-    keys.sort()
-    for key in keys:
-        print(key + ':', dict[key])
+    info_dict = x.info(fn)
+    for key in sorted(info_dict.keys()):
+        print(key + ':', info_dict[key])
     print('='*70)
 
 def head(x, copts, fn):
diff --git a/Demo/pdist/server.py b/Demo/pdist/server.py
index 98a4741..7e77971 100755
--- a/Demo/pdist/server.py
+++ b/Demo/pdist/server.py
@@ -101,9 +101,7 @@
 
     def _listmethods(self, cl=None):
         if not cl: cl = self.__class__
-        names = list(cl.__dict__.keys())
-        names = [x for x in names if x[0] != '_']
-        names.sort()
+        names = sorted([x for x in cl.__dict__.keys() if x[0] != '_'])
         for base in cl.__bases__:
             basenames = self._listmethods(base)
             basenames = list(filter(lambda x, names=names: x not in names, basenames))
diff --git a/Demo/scripts/ftpstats.py b/Demo/scripts/ftpstats.py
index d0a0824..19ad392 100755
--- a/Demo/scripts/ftpstats.py
+++ b/Demo/scripts/ftpstats.py
@@ -106,9 +106,7 @@
     n = len(title)
     print('='*((70-n)/2), title, '='*((71-n)/2))
     list = []
-    keys = list(dict.keys())
-    keys.sort()
-    for key in keys:
+    for key in sorted(dict.keys()):
         n = len(str(key))
         list.append((len(dict[key]), key))
     maxkeylength = 0
@@ -128,8 +126,7 @@
     n = len(title)
     print('='*((70-n)/2), title, '='*((71-n)/2))
     list = []
-    keys = list(dict.keys())
-    for key in keys:
+    for key in dict.keys():
         list.append((-len(dict[key]), key))
     list.sort()
     for count, key in list[:maxitems]:
diff --git a/Demo/scripts/markov.py b/Demo/scripts/markov.py
index a91e359..3dc57ce 100755
--- a/Demo/scripts/markov.py
+++ b/Demo/scripts/markov.py
@@ -87,7 +87,7 @@
         return
     if debug: print('done.')
     if debug > 1:
-        for key in list(m.trans.keys()):
+        for key in m.trans.keys():
             if key is None or len(key) < histsize:
                 print(repr(key), m.trans[key])
         if histsize == 0: print(repr(''), m.trans[''])
diff --git a/Demo/scripts/newslist.py b/Demo/scripts/newslist.py
index 4635f1d..7038380 100755
--- a/Demo/scripts/newslist.py
+++ b/Demo/scripts/newslist.py
@@ -172,10 +172,9 @@
         createpage(p[1:], tree, p)
         return
 
-    kl = list(tree.keys())
+    kl = sorted(tree.keys())
 
     if l > 1:
-        kl.sort()
         if indent > 0:
             # Create a sub-list
             f.write('<LI>'+p[1:]+'\n<UL>')
diff --git a/Demo/threads/Coroutine.py b/Demo/threads/Coroutine.py
index 6bf788b..4a155f8 100644
--- a/Demo/threads/Coroutine.py
+++ b/Demo/threads/Coroutine.py
@@ -127,7 +127,7 @@
         if self.killed:
             raise TypeError('kill() called on dead coroutines')
         self.killed = 1
-        for coroutine in list(self.invokedby.keys()):
+        for coroutine in self.invokedby.keys():
             coroutine.resume()
 
     def back(self, data=None):
diff --git a/Demo/tix/samples/OptMenu.py b/Demo/tix/samples/OptMenu.py
index 2cf625a..1d39420 100755
--- a/Demo/tix/samples/OptMenu.py
+++ b/Demo/tix/samples/OptMenu.py
@@ -40,7 +40,7 @@
     #        global variables "demo_opt_from" and "demo_opt_to". Otherwise
     #        the OptionMenu widget will complain about "unknown options"!
     #
-    for opt in list(options.keys()):
+    for opt in options.keys():
         from_file.add_command(opt, label=options[opt])
         to_file.add_command(opt, label=options[opt])
 
diff --git a/Demo/tkinter/guido/AttrDialog.py b/Demo/tkinter/guido/AttrDialog.py
index 98bdd14..921c105 100755
--- a/Demo/tkinter/guido/AttrDialog.py
+++ b/Demo/tkinter/guido/AttrDialog.py
@@ -112,7 +112,7 @@
     def addchoices(self):
         self.choices = {}
         list = []
-        for k, dc in list(self.options.items()):
+        for k, dc in self.options.items():
             list.append((k, dc))
         list.sort()
         for k, (d, c) in list:
@@ -260,7 +260,7 @@
             classes = {}
             for c in (self.classes,
                       self.addclasses[self.klass]):
-                for k in list(c.keys()):
+                for k in c.keys():
                     classes[k] = c[k]
             self.classes = classes
 
@@ -273,7 +273,7 @@
     def update(self):
         self.current = {}
         self.options = {}
-        for k, v in list(self.configuration.items()):
+        for k, v in self.configuration.items():
             if len(v) > 4:
                 self.current[k] = v[4]
                 self.options[k] = v[3], v[2] # default, klass
diff --git a/Demo/xml/elem_count.py b/Demo/xml/elem_count.py
index a2b4647..e083e64 100644
--- a/Demo/xml/elem_count.py
+++ b/Demo/xml/elem_count.py
@@ -15,7 +15,7 @@
         self._attrs = self._attrs + len(attrs)
         self._elem_types[name] = self._elem_types.get(name, 0) + 1
 
-        for name in list(attrs.keys()):
+        for name in attrs.keys():
             self._attr_types[name] = self._attr_types.get(name, 0) + 1
 
     def endDocument(self):
@@ -23,11 +23,11 @@
         print("There were", self._attrs, "attributes.")
 
         print("---ELEMENT TYPES")
-        for pair in  list(self._elem_types.items()):
+        for pair in  self._elem_types.items():
             print("%20s %d" % pair)
 
         print("---ATTRIBUTE TYPES")
-        for pair in  list(self._attr_types.items()):
+        for pair in  self._attr_types.items():
             print("%20s %d" % pair)
 
 
diff --git a/Demo/xml/roundtrip.py b/Demo/xml/roundtrip.py
index b0e131e..8d7d437 100644
--- a/Demo/xml/roundtrip.py
+++ b/Demo/xml/roundtrip.py
@@ -22,7 +22,7 @@
 
     def startElement(self, name, attrs):
         self._out.write('<' + name)
-        for (name, value) in list(attrs.items()):
+        for (name, value) in attrs.items():
             self._out.write(' %s="%s"' % (name, saxutils.escape(value)))
         self._out.write('>')