Peter Otten wrote: >>>> s = """ > ... In the framework of a project on evolutionary linguistics I wish to > ... have a program to process words and simulate the effect of sound > ... shift, for instance following the Rask's-Grimm's rule. I look to have > ... python take a dictionary file or a string input and replace the > ... consonants in it with the Grimm rule equivalent. For example: > ... """ >>>> rules = ["bpf", ("d", "t", "th"), "gkx"] >>>> for rule in rules: > ... rule = rule[::-1] # go back in time > ... for i in range(len(rule)-1): > ... s = s.replace(rule[i], rule[i+1]) > ...
Warning: this simple-minded approach somewhat limits the possible rules. E. g. it fails for a --> b b --> a >>> "abba".replace("a", "b").replace("b", "a") 'aaaa' while unicode.translate() can deal with it: >>> u"abba".translate({ord(u"a"): u"b", ord(u"b"): u"a"}) u'baab' Or, if you are using Python 3.x as Steven suggested: >>> "abba".translate({ord("a"): "b", ord("b"): "a"}) 'baab' Peter -- http://mail.python.org/mailman/listinfo/python-list