【问题标题】:add [key,value] to python dictionary in a loop在循环中将 [key,value] 添加到 python 字典
【发布时间】:2019-01-26 18:47:36
【问题描述】:

我是 python 新手,我正在尝试通过将它们与它们的类类型匹配来索引一堆 pcd 文件(每个文件本质上是一个 n*3 数组)。某些文件是类 1、2、3 等等。当我尝试运行它时,我收到一个unhashable numpy.ndarrayerror。由于我有一排需要加载和索引的文件,我应该如何进行?

path= glob.glob("path/to/pcd/folder/*.pcd")
data_dict=dict()
for i in range(len(list(path):
    currentPath = path[i]
    classtype=currentPath[-5:]
    classtype=classtype[0]
    p = pcl.load(path[i])
    a = np.asarray(p)
    data_dict[a]=classtype
    
    

【问题讨论】:

  • 一个问题是你有 dict 向后查找。在第三行你有”Object”:a,也就是说键是对象,值是a。如果你想得到一个你应该做dict[“Object”]而不是dict[a]
  • 你应该查看字典documentation
  • 嘿@K.Dackow,我尝试了您的解决方案,现在我的循环正在迭代,但它正在覆盖以前的数组。我希望在我的字典中建立的关系是:classtype。我应该以不同的方式声明吗?
  • a:classtype 是什么意思?现在 classtype 只是一个字符串,所以它实际上并不代表对象的类型,它实际上只是 classtype。但是,是的,如果您想通过字典将 a 映射到类类型,则在声明中切换它们的顺序
  • 但是你的目标是什么?你能澄清你想让dict做什么吗?您是否希望输入数组中的每个元素都成为映射到其类类型的字典中的元素?

标签: python dictionary point-clouds


【解决方案1】:

要将所有 PCL 放入字典中以便查找它们对应的 Classtype,您需要执行以下操作:

my_dict = dict() # declaring empty dictionary
for point_cloud in pcl_list:
    my_dict[point_cloud] = classtype #somewhere in the loop you need to set what classtype is for each specific point_cloud

现在你可以这样做了:

>> my_dict[some_pcl]
<the corresponding classtype>

【讨论】:

  • 我认为查看文档将帮助我更好地理解它。我试过你的代码,但它仍然给了我unhashable numpy.ndarrayerror。
  • 哪一行抛出了这个错误?我的代码不是完整的代码并且不会工作,因为我不确切知道您正在使用的数据结构。但是,它从概念上展示了如何遍历某些内容以将它们放入字典中
  • 导致错误的原因是什么?什么线或对象?您能否在问题中发布更多代码?
  • 我已经添加了整个代码。错误在代码的最后一行。希望对您有所帮助!
  • 将 dict 重命名为其他名称。您通过命名变量 dict 来覆盖内置字典方法!我不知道这是否能彻底解决问题,但确实需要改变
猜你喜欢
  • 1970-01-01
  • 2017-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-16
相关资源
最近更新 更多