Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中不可损坏的类型:“列表”错误_Python_Python 3.x - Fatal编程技术网

Python中不可损坏的类型:“列表”错误

Python中不可损坏的类型:“列表”错误,python,python-3.x,Python,Python 3.x,我已经检查了一些与stackoverflow中的unhable类型“list”相关的问题答案,但没有一个对我有帮助。这是我的部分代码: keyvalue = {}; input_list_new = input_list; for file in os.listdir('Directory/'): pathname = os.path.join('Directory/', file) dict_table = []; # creates blank 2d array w

我已经检查了一些与stackoverflow中的unhable类型“list”相关的问题答案,但没有一个对我有帮助。这是我的部分代码:

keyvalue = {};
input_list_new = input_list;

for file in os.listdir('Directory/'):
    pathname = os.path.join('Directory/', file)
    dict_table = []; # creates blank 2d array
    with open(pathname) as dict_file:
        for line in dict_file:
            dict_table.append(line.strip().split("\t"))
    dict_list = [];
    for i in list(range(0, len(dict_table))):
        dict_list.append(dict_table[i][0])
    matched = list(set(dict_list) & set(input_list)) 
    for i in list(range(0, len(matched))):
        temp = [dict_table[0][0]] + dict_table[(dict_list.index(matched[i]))]

        input_list_new.insert((input_list_new.index(matched[i])), temp)

        dict = {matched[i] : temp}
        keyvalue.update(dict)

其中dict_table是一个列表列表,dict_list只是一个列表&keyvalue是一个python字典。当我注释行input\u list\u new.insertinput\u list\u new.indexmatched[I],temp时,整个代码运行良好,但如果没有注释该行,它将显示不可损坏的类型:“list”错误。

错误消息与该行不对应

input_list_new.insert((input_list_new.index(matched[i])), temp)
被评论掉了。如果有什么不同的话,罪魁祸首就是这条线

dict = {matched[i] : temp}
问题应该是您试图使用列表作为字典键。以下是问题的简单再现方式:

{[]: 5}  # throws TypeError: unhashable type: 'list'
它之所以失败,是因为字典在其他语言中也被称为hashmap。该键必须是可散列的,在Python中,如果试图在键抛出时使用列表,则会出现错误,因为列表不可散列。请参见可散列项


避免使用列表,因为字典键可以解决问题。

我猜。。。。您提到,该错误与行matched=listsetdict\u list&setinput\u list有关。。这可能是因为在输入列表或命令列表中,列表中有一个列表。。。。集合中的项需要是可散列的,因此是不可变的。。例如,您不能设置[1,5,6、[1,3]]。。。这将导致不可损坏的类型列表错误。。。但是你可以设置[1,5,6,1,3],因为元组是不可变的和可散列的

我建议去掉分号;这是Python:您能准确地显示错误吗?错误出现在哪一行?>请将错误的完整回溯粘贴到您的问题中;将其放在代码块中以保留格式。顺便说一句,使用dict作为变量名是个坏主意,因为它会隐藏内置的dict类型,如果您试图使用dict创建字典,可能会导致神秘的错误。这对于您发布的部分代码来说不是问题,但它可能会影响该函数/模块中的后续代码。请使用问题行中的片段,查看哪些是导致问题的原因。也就是说,把匹配的[i]放到它的线上,把输入。。。etcSome place或其他您正在使用列表作为字典或集合的键,例如`set[[1,2],3]`本身会产生此错误。{}[[1,2]]也是。嘿,马丁,谢谢你的建议。但我并没有使用列表作为python字典的键,matched[I]只是一个字符串。是否可能以某种方式将列表插入matched中?你能在dict={matched[i]:temp}之前每次打印匹配[i]并查看崩溃前的最后一个值吗?此外,查看错误发生在哪个行号上也是非常有用的。字典不一定是hashmap,因此术语不是同义词。