【问题标题】:Breaking up a string by comparing characters/combinations of characters against a dictionary通过将字符/字符组合与字典进行比较来分解字符串
【发布时间】:2017-04-02 22:19:56
【问题描述】:

我想做的是这样的:

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。任何帮助表示赞赏。

【问题讨论】:

  • 也许只有我一个人,但我不明白示例输入和输出。你能更明确地介绍其中一个或两个吗?
  • 是的,@rbierman 所说的 - 您的问题描述必须更加明确和清晰,也许还有一些更详细的示例。没有人可以帮助您修复应该执行您在非工作代码中主要描述的事情的代码。
  • @rbierman,刚刚编辑帖子以修复字典。采取abcacababa。遍历我们得到a,它在testdictionary中,所以我们再次附加list1。这次我们有ab,它不在字典中,所以我们将它作为键添加到testdictionary,值为200。然后再次执行相同的过程,我们将ca添加到testdictionary,值为201。然后由于我们已经添加了ca,下一个附加到list2 的值将是cab,依此类推。我希望这至少能澄清一点,抱歉我的解释不够清楚。
  • 把这些东西放在你的问题中,而不是 cmets,@Boa

标签: python python-2.7 list loops dictionary


【解决方案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']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-05
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多