2014-08-30 199 views
0

我試圖做一個zip list查找和替換,使用另一個列表,但由於某種原因,我似乎無法得到我的頭,而不是easy問題。所以,首先,我有一個拉鍊列表,它看起來像(說myzip_list):列表查找和替換元素在另一個列表

("this is a united string divided here","this is the value of the string),("this is a multiply string2 united here","this is the value of the string2).... 
現在

,我還有一個列表,它看起來像這樣(說replace_list):

[['united', '##sharp'], ['divided', '##blunt'], ['multiply', '##med']] 

我想要做的是將myzip_list [0]元素替換爲double hash,值爲replace_list。因此,作爲一個最終的結果,我想直到結束:

myzip_list = ("this is a ##sharp string ##blunt here","this is the value of the string),("this is a ##med string2 ##sharp here","this is the value of the string2).... 

希望如果有人也許可以點我在正確的方向...

編輯

網絡的如果replace_list只包含一個單詞,下面的答案實際上是有效的。因此,例如,如果replace_list樣子:

[['united all', '##sharp'], ['divided me', '##blunt'], ['multiply all', '##med']] 

如果myzip_list樣子:

("this is a united all string divided me here","this is the value of the string),("this is a multiply all string2 united all here","this is the value of the string2).... 

..然後Cyber​​s方法失敗。

回答

0
l = [['united', '##sharp'], ['divided', '##blunt'], ['multiply', '##med']] 
d = dict(l) 

>>> d 
{'multiply': '##med', 'divided': '##blunt', 'united': '##sharp'} 

tups = [("this is a united string divided here","this is the value of the string"),("this is a multiply string2 united here","this is the value of the string2")] 

[[' '.join([d.get(i,i) for i in sub.split()]) for sub in tup] for tup in tups] 

輸出

[['this is a ##sharp string ##blunt here', 'this is the value of the string'], 
['this is a ##med string2 ##sharp here', 'this is the value of the string2']] 
+0

問題是我的'''實際上是一個'zip列表'。當我實現你的解決方案時,我得到'AttributeError:'元組'對象沒有屬性'split'' – JohnJ 2014-08-30 18:32:08

+0

哦好吧我看到了這個問題。編輯我的帖子。 – CoryKramer 2014-08-30 18:36:17

+1

非常感謝你@Cyber​​ - 它完美的工作,我喜歡它,因爲它基本上是一個班輪:)接受你的答案。再次感謝 - 爲我節省了大量的時間。 – JohnJ 2014-08-30 18:55:10

0

zip功能是其本身的逆所以如果你有zip名單將它解壓縮與本身!通過像zip(*your_list)這樣的命令,然後使用下面的代碼!

import re 
myzip_list="(this is a united string divided here,this is the value of the string),(this is a multiply string2 united here,this is the value of the string2)" 
tempword=[w for w in re.split('\W', myzip_list) if w] 
replace_list=[['united', '##sharp'], ['divided', '##blunt'], ['multiply', '##med']] 
my_dict=dict(replace_list) 
lst=my_dict.keys() 

for i in range(len(tempword)) : 
for j in lst: 
    if tempword[i]==j: 
     tempword[i]=my_dict[j] 

print ' '.join(tempword) 

DEMO:

"this is a ##sharp string ##blunt here this is the value of the string this is a ##med string2 ##sharp here this is the value of the string2" 

,如果你不想使用re所以更改re.split('\W', myzip_list)my_ziplist.split()和刪除impoer re

+0

不知道我想做'import re' route for this problem .. – JohnJ 2014-08-30 19:29:31

+0

沒問題,所以要用'my_ziplist.split()'改變're.split('\ W',myzip_list)''並刪除'impoer re'。#我在編輯中添加這個解釋! – Kasramvd 2014-08-30 19:40:36

相關問題