Roy Smith wrote:
You've got a list of words (actually, they're found by searching a
data structure on the fly, but for now let's assume you've got them as
a list). You need to create a comma-delimited list of these words.
There might be duplicates in the original list, which you want to
eliminate in the final list. You don't care what order they're in,
except that there is a distinguised word which must come first if it
appears at all.
Some examples ("foo" is the distinguised word):
["foo"] => "foo"
["foo", "bar"] => "foo, bar"
["bar", "foo"] => "foo, bar"
["bar", "foo", "foo", "baz", "bar"] => "foo, bar, baz" or "foo, baz, bar"
The best I've come up with is the following. Can anybody think of a
simplier way?
Who knows whether this is "simpler", but it does demonstrate that you
can customize the sort of a list:
#!/usr/bin/env python
def makesorter(first):
"""Return a sort function that sorts first to the top."""
def sorter(x, y):
if x == first:
return -1
elif y == first:
return 1
else:
return 0
return sorter
words = ["foo", "bar", "baz", "foo", "bar", "foo", "baz"]
first = 'foo'
sorter = makesorter(first)
unique = {}
for word in words:
unique[word] = word
keys = unique.keys()
keys.sort(sorter)
print ', '.join(keys)
--
http://mail.python.org/mailman/listinfo/python-list