【问题标题】:TypeError: unhashable type: 'list' PythonTypeError: unhashable type: 'list' Python
【发布时间】:2015-02-11 17:28:53
【问题描述】:

我正在尝试使用 csv dict 提取列的列号并将其作为 countt 的输入。但是,它给了我一个错误说TypeError: unhashable type: 'list' Python。这是我的代码中给我带来麻烦的部分。

indexes = [i for i,x in enumerate(all_fieldnames) if x == barcode]
countt = [rec[indexes] for rec in tsv_data]

如果您能告诉我如何解决它,我将不胜感激。

在此处发布之前,我在 stackoverflow 上看到了许多类似的问题,但没有一个有帮助。

【问题讨论】:

  • rec 是字典吗?您正在传递一个 list 索引(indexes 是一个列表)。
  • rec[indexes]你想做什么?
  • 如果你真的想在 Python dict 中使用类似列表的结构作为键,那么使用元组。要将列表 xs 转换为元组,请使用 tuple(xs)。 Python 的开发者之所以要禁止list,是因为它是可变的。如果我们更改之前用作字典键的list 对象,该键是否也应该更改?如果是,那就很难实施了。

标签: python csv enums hashtable


【解决方案1】:

您正在传递一个索引列表(indexes 就是那个列表)。此外,rec 是一个字典(假设您使用的是DictReader),因此您应该使用键,而不是索引。

如果barcode 包含您要查找的字段名称,您可以使用:

countt = [rec[barcode] for rec in tsv_data]

【讨论】:

  • 也许是countt = [rec[barcode] for rec in tsv_data]... 不会缝合乱七八糟的字符串
  • @Micheled'Amico:确实;虽然我也不确定这是否是意图。
  • 相信我!我以前试过这个,但没有用!现在效果很好。非常感谢!
猜你喜欢
  • 2020-05-11
  • 2022-12-05
  • 2021-03-14
  • 1970-01-01
  • 1970-01-01
  • 2019-10-11
  • 2020-03-27
  • 1970-01-01
  • 2018-06-04
相关资源
最近更新 更多