为什么在尝试修改字典时会出现此错误:"TypeError:unhashable type:'slice'

Tam*_*211 2 python string hash dictionary compiler-errors

我正在尝试构建一个函数,它将字符串和数字k作为输入,并返回一个字典,其字符串是来自原始字符串的长度为k的字符串,每个键的值是一个索引序列,字符串出现了.

运行示例:

<<< hash_sequence("byebyeboy",3 ( 

{ 'yeb': [1, 4], 'boy': [6], 'bye': [0, 3], 'ebo': [5], 'eby': 
[2] } 
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

def hash_sequence(string, k):
    dictionary={}
    for i in range(len(string)):
        dictionary[i:i+3]=[i]
        if dictionary[i:i+3] in dictionary:
            dictionary[i:i+3]+=[1]
    return dictionary 
Run Code Online (Sandbox Code Playgroud)

roi*_*ppi 6

哦,我知道你想做什么-切片的字符串.错误的语法.

dictionary[i:i+3]=[i]
Run Code Online (Sandbox Code Playgroud)

应该

dictionary[string[i:i+3]]= [i]
Run Code Online (Sandbox Code Playgroud)

同样在下一行if dictionary[i:i+3] in dictionary:变为if string[i:i+3] in dictionary:等等.

老实说,你这样做的方式使代码非常混乱.如果您使用setdefault(并修复其他一些错误),情况会更清楚:

def hash_sequence(s, k=3):
    dictionary={}
    for i in range(len(s) - k + 1):
        triplet = s[i:i+k]
        dictionary.setdefault(triplet,[]).append(i)
    return dictionary

hash_sequence('byebyeboy')
Out[28]: {'boy': [6], 'bye': [0, 3], 'ebo': [5], 'eby': [2], 'yeb': [1, 4]}
Run Code Online (Sandbox Code Playgroud)