【问题标题】:TypeError: unhashable type: 'list' How can I put image in list in the same order?TypeError: unhashable type: 'list' 如何以相同的顺序将图像放入列表中?
【发布时间】:2018-07-17 08:28:48
【问题描述】:

我写在views.py

import os
import cv2
from pathlib import Path

path1 = Path(__file__).parent
path1 /= "../test1"

path2 = Path(__file__).parent
path2 /= "../test2"

index_list =[]
for i in path1.iterdir():
  i = str(i)
  if i.split(".")[-1].lower() in {"jpeg", "jpg", "png"}:
      img = cv2.imread(i)
      print(type(img)) #1
      img = img.tolist()
      print(type(img)) #2
      if img is None:
         print("Couldn't open file %s" % i)
      else:
         index_list.append(img)
         index_list = sorted(set(index_list), key=index_list.index)

test1 & test2 文件夹有图片。

当我运行这段代码时,

TypeError: unhashable type: 'list' 错误

发生。 Traceback 说 Traceback(最近一次通话最后一次):

文件“views.py”,第 33 行,在 index_list = sorted(set(index_list), key=index_list.index) 。 #1 中的 print(type(img)) 显示,#2 中的 print(type(img)) 显示。 #2 中 print(type(img)) 的 img 有 [[[255, 255, 255], [255, 255, 255], [255, 255, 255] ・・・]]。

我认为这些值是列表嵌套导致此错误。但我无法理解如何修复这些数据。如何以相同的顺序将图像数据放入列表中?

【问题讨论】:

  • 你不能散列一个列表。将其转换为元组
  • @ᴡʜᴀᴄᴋᴀᴍᴀᴅᴏᴏᴅʟᴇ3000 谢谢你的cmets。我看不懂你的cmets。你能告诉我你想要的代码吗?
  • 你不能在你的列表(index_list)上使用set函数

标签: python numpy


【解决方案1】:

您的问题在这里:index_list = sorted(set(index_list), key=index_list.index)。您不能在列表列表上使用 set,因为列表不可散列。

试试这个:index_list = sorted(set([tuple([tuple(r) for r in e]) for e in index_list]), key=index_list.index)

【讨论】:

  • 谢谢你的回答。我写了你的代码,但是 TypeError: unhashable type: 'list' error发生在 index_list = sorted(set([tuple(e) for e in index_list]), key=index_list .index) .它发生在你的代码中吗?我该如何解决这个问题?
  • img 包含什么?如果是列表,可能需要转成元组
  • img 是 。我想已经在你的代码中将它转换为元组,但我误解了吗?
  • Img 中有需要转换为元组的列表。那一定是问题所在……
猜你喜欢
  • 2015-02-11
  • 2012-11-20
  • 1970-01-01
  • 2019-10-11
  • 2020-03-27
  • 2020-05-11
  • 1970-01-01
  • 2020-07-12
相关资源
最近更新 更多