2017-07-09 52 views
0

給定字符串和單詞替換字典,我試圖讓python返回所有變體字符串。例如。對於字符串「一個去市場」,並替換字典{'一':['一','二','三'],'市場':['鎮','牀']}我想返回:['去了一個城市','兩個去了城裏','三個去了城裏',一個上了牀','兩個上了牀','三個上了牀']。目前,只有當有兩個替換選項時,纔有這個功能。生成基於替換字典的變體字符串,僅用於Python中的某些單詞

我的部分工作方法使用詞典生成的單詞列表,例如,在上面的例子中,我有['一,二,三','去','去','鎮,牀']。這本:

def perm(wordlist): 
    a=[[]] 
    for i in wordlist: 
     if ',' in i: 
      wds=i.split(',') 
      for alis in a: 
       alis.append(wds[0]) 
      for j in wds[1:]: 
       b=[x[:-1] for x in a] 
       for alis in b: 
        alis.append(j) 
        a=a+b 
     else: 
      for alis in a: 
       alis.append(i) 
    return a 

爲[「一,二」,「去」,「到」,「鎮,牀」]我得到所要的結果,但任何一次有兩個以上的選項,它的失控。

+0

你到現在爲止嘗試過什麼?你能發佈你的代碼嗎? –

+0

另外,你想如何處理重複?如何處理「一次再去酒店一次」?在這種情況下,你想要生成3個句子還是9個? –

+0

在這種情況下9個句子(儘管我的輸入可能不會出現。) – Smallpip

回答

0

據說你有這些:

string = "One went to market" 
dict_repl = {'One':['One','Two','Three'],'market':['town','bed']} 

您可以使用使用string comprehensionstr.replace這一個班輪讓您預期的結果:

result = [string.replace('market',v).replace('One',i) for v in dict_repl['market'] for i in dict_repl['One']] 

輸出:

['One went to town', 'Two went to town', 'Three went to town', 'One went to bed', 'Two went to bed', 'Three went to bed'] 

我相信這是你要求的。

+0

謝謝,這是所需的輸出,但如何你會不會適應數以千計的不同輸入,並且有幾十個鍵和幾百個值的字典? – Smallpip

+0

,你仍然想要一,二,三重複你的不同的其他單詞,如「一個去與安妮市場」,「一個去與Mikasa市場」,然後與「兩個」,然後與「三」?我真的沒有得到你要找的組合@Smallpip –

+0

是的確切:一個是mikasa,兩個是mikasa,三個是mikasa,一個是annie,兩個是annie,等等。所以所有帶有repl_dict條目的單詞都會生成包含repl_dict中所有其他單詞的新字符串以及沒有條目的單詞對於所有字符串都保持共同。 – Smallpip

相關問題