2016-11-18 64 views
0

我想什麼做的是這樣的:由字符的字符/組合,對字典比較分手字符串

testdictionary = {"a":1, "b":2, "c":3, "A":4} 
list1 = [] 
list2 = [] 
keyval = 200 
for char in string: 
    i = 0 
    y = "".join(list1) 
    while y in testdictionary: 
     list1.append(string[i]) 
     i +=1 
    list2.append(y[:-1]) 
    testdictionary[y] = keyval 
    keyval +=1 
    string = string[((len(list1))-1):] 
    list1 = [] 

所以對於一個字符串「abcacababa」所需的輸出將是:

['ab', 'ca', 'cab', 'aba'] 

或 「AAAAA」 將是

['A', 'AA'. 'AA'] 

採取abcacababa。迭代通過我們得到a這是在testdictionary所以我們再追加list1。這次我們有ab這不在字典中,所以我們把它作爲testdictionary的一個關鍵字添加,值爲200.然後再次執行相同的過程,我們將ca加到testdictionary的值爲201.然後,因爲我們已經添加ca,附加到list2的下一個值將是cab等等。

我想要做的是取一個字符串,並將每個字符與一個字典進行比較,如果該字符是字典中的一個鍵添加另一個字符,請執行此操作,直到它不在字典中的哪一點將其添加到字典並給它賦值,繼續爲整個字符串做這個。

這段代碼顯然有很多錯誤,但它也不起作用。 i索引超出範圍,但我不知道如何處理這個迭代。此外,我需要添加if語句以確保末尾字符串的「剩餘部分」被附加到list2。任何幫助表示讚賞。

+1

也許這只是我,但我不明白示例輸入和輸出。你能更清楚地瞭解其中一個還是兩個? – mitoRibo

+0

是的,@ rbierman說 - 你的問題描述必須更加明確和清晰,或許有一些更詳細的例子。沒有人可以幫助你修復那些應該做一些你在非工作代碼中主要描述的代碼。 – pvg

+0

@rbierman,剛編輯過的文章修復字典。採取'abcacababa'。迭代通過我們得到'test'中的'''',所以我們再次追加'list1'。這次我們有'ab',它不在字典中,所以我們將它作爲'testdictionary'的一個鍵添加爲200.然後再次執行相同的過程,我們將'ca'添加到'testdictionary'中然後,由於我們已經添加了'ca',附加到'list2'的下一個值將會是'cab'等等。我希望這至少能夠澄清一點,對於我的解釋不清晰表示歉意。 – Boa

回答

1

我覺得我現在@Boa。我認爲這個代碼至少適用於abcacababa。至於剩菜,我認爲這是隻可能有一個「剩」鍵時,最後的關鍵是在測試字典,所以你只要在循環後檢查curr_key不爲空:

testdictionary = {"a":1, "b":2, "c":3, "A":4} 
word = 'abcacababa' 

key_val = 200 
curr_key = '' 

out_lst = [] 
let_ind = 0 

for let in word: 
    curr_key += let 
    if curr_key not in testdictionary: 
     out_lst.append(curr_key) 
     testdictionary[curr_key] = key_val 
     key_val += 1 
     curr_key = '' 

leftover = curr_key 
print(out_lst) 
print(testdictionary) 

輸出:

['ab', 'ca', 'cab', 'aba'] 
{'a': 1, 'A': 4, 'c': 3, 'b': 2, 'aba': 203, 'ca': 201, 'ab': 200, 'cab': 202} 

請讓我知道,如果有什麼不清楚。另外我認爲你的第二個例子AAAAA應該是['AA', 'AAA']而不是['A', 'AA', 'AA']