首页 > 解决方案 > TypeError: unhashable type: 'list' 如何从数据列表中获取出现

问题描述

我有一个这样的列表:

  list A = [['ProeminenceBatiPCRS'], ['ProeminenceBatiPCRS'], ['ProeminenceBatiPCRS'], ['ProeminenceBatiPCRS'], ['ProeminenceBatiPCRS'], ['ProeminenceBatiPCRS'], ['Proemine
nceBatiPCRS'], ['ProeminenceBatiPCRS'], ['ProeminenceBatiPCRS'], ['ProeminenceBatiPCRS'], ['ProeminenceBatiPCRS'], ['ProeminenceBatiPCRS']['RailPCRS'], ['RailPCRS'], ['RailPCRS'], ['RailPCRS'], ['RailPCRS'], ['RailPCRS'], ['RailPCRS'], ['RailPCRS'], ['RailPCRS'], ['RailPCRS'], ['RailPCRS'], ['RailPCRS'], ['RailPCRS'], ['RailPCRS'], ['RailPCRS'], ['RailPCRS']
    , ['RailPCRS'], ['RailPCRS'], ['RailPCRS'], ['RailPCRS'], ['RailPCRS'], ['RailPCRS'], ['RailPCRS'], ['RailPCRS'], ['RailPCRS'], ['RailPCRS'], ['RailPCRS'], ['RailPCRS'], ['RailPCRS'], ['RailPCRS'], ['RailPCRS'], ['RailPCRS'], ['RailPCR
S'], ['RailPCRS'], ['RailPCRS'], ['RailPCRS'], ['RailPCRS'], ['RasterPCRS'], ['SeuilPCRS']]

我怎样才能发现出现并获得一个新列表[ProeminenceBatiPCRS, RailPCRS]?我试过这个,但我总是有同样的错误:

 data = set(listA)
 print(data)

错误 :

 TypeError: unhashable type: 'list'

标签: python

解决方案


list是有序结构(列表中的项目是有序的),而是set无序的。所以你可以做my_list[1],但不能my_set[1]。问题是,你基本上有一个字符串列表,但每个字符串也在一个单独的列表中。这些内部列表无法添加到集合中。所以你需要从他们自己的列表中去嵌入你的字符串,像这样:

list_A = [['ProeminenceBatiPCRS'], ['ProeminenceBatiPCRS'],['RailPCRS'], ['RailPCRS']]
unwrapped_list = [internal_list[0] for internal_list in list_A]
set_A = set(unwrapped_list)

>>> print(list_A)
>>> print(unwrapped_list)
>>> print(set_A)
[['ProeminenceBatiPCRS'], ['ProeminenceBatiPCRS'], ['RailPCRS'], ['RailPCRS']]
['ProeminenceBatiPCRS', 'ProeminenceBatiPCRS', 'RailPCRS', 'RailPCRS']    
{'RailPCRS', 'ProeminenceBatiPCRS'}

如果您真的想要列表中的唯一单词而不是集合,请在末尾添加:

unique_list = list(set_A)
>>> print(unique_list)
['RailPCRS', 'ProeminenceBatiPCRS']

请注意,如果您的内部列表中包含超过 1 个字符串,您将需要调整此代码,该代码仅从每个内部列表中获取第一个字符串。


推荐阅读