2016-11-18 60 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']