【问题标题】:Why do I get this error while trying to modify a dictionary: "TypeError: unhashable type: 'slice'为什么在尝试修改字典时出现此错误:“TypeError: unhashable type: 'slice'
【发布时间】:2014-07-01 08:58:31
【问题描述】:

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

运行示例:

<<< hash_sequence("byebyeboy",3 ( 

{ 'yeb': [1, 4], 'boy': [6], 'bye': [0, 3], 'ebo': [5], 'eby': 
[2] } 

这是我的代码:

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 

【问题讨论】:

  • 您希望dictionary[i:i+3]=[i] 做什么?
  • @roippi 将索引号添加到键值中,我猜这是我的错误,那么我该如何更新键值?

标签: python string dictionary hash compiler-errors


【解决方案1】:

哦,我明白你要做什么了 - 切分 字符串。语法错误。

dictionary[i:i+3]=[i]

应该是

dictionary[string[i:i+3]]= [i]

同样,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]}

【讨论】:

    猜你喜欢
    • 2018-08-12
    • 2022-11-17
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    相关资源
    最近更新 更多