通过将字符/字符组合与字典进行比较来分解字符串

时间:2016-11-18 23:55:57

标签: python python-2.7 list loops dictionary

我想做的是这样的事情:

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 个答案:

答案 0 :(得分: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']