Nested string substitutions
Antonio Cuni
TOGLIMIcuni at programmazione.it
Fri Dec 20 15:43:12 EST 2002
More information about the Python-list mailing list
Fri Dec 20 15:43:12 EST 2002
- Previous message (by thread): Nested string substitutions
- Next message (by thread): Nested string substitutions
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Lulu of the Lotus-Eaters wrote:
> I think I am being daft here. But I cannot think of an elegant way to
> perform a nested expansion of a set of substitution patterns.
>
> For example, let's say I have a dictionary of patterns:
>
> subs = {'foo':'bar baz',
> 'bar':'bat bam ber',
> 'baz':'zat zam zer',
> 'bam':'yat yam yer',
> 'yam':'spam and eggs'}
this can be seen as an acyclic directed graph: each word is a node and
each dictionary pairs defines the arcs. Our goal is to compute the
transitive closures of the graph:
First, we should use a better data structure for our job:
subs = { 'foo': ['bar', 'baz'],
'bar': ['kat', 'www'],
'baz': [],
'kat': [],
'www': [] }
It is trivial to pass from the form to the latter. Notice that each node
must be in the dictionary, even if it has no children.
Now we can use this algorithm (it's by Floyd, if I recall correctly) to
compute the transitive closures:
for k in subs:
for i in subs:
for j in subs:
if k in subs[i] and j in subs[k]:
subs[i].append(j)
Obviously "k in subs[i]" tests for an arc from i to k, and so on.
for word in subs:
print word, subs[word]
baz []
www []
foo ['bar', 'baz', 'www', 'kat']
bar ['kat', 'www']
kat []
I'm sorry but it's longer than two lines... ;-)
ciao Anto
--
"Computer science is not about computers any more than astronomy
is about telescopes." -- EW Dijkstra
- Previous message (by thread): Nested string substitutions
- Next message (by thread): Nested string substitutions
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list