我想在一个以某个字符开头的文件中打印一组行(这里是' s" c"),但每当我尝试将列表转换为一个列表时,我都会收到错误一套
我有以下代码:
z = open("test.txt", "r")
wordList = [line.rstrip().split() for line in z if line.startswith(("c"))]
wordList = set(wordList)
print(wordList)
这是我得到的错误:
Traceback (most recent call last):
wordList = set(wordList)
TypeError: unhashable type: 'list'
答案 0 :(得分:2)
如果您放弃.split()
,则最终会得到一组行。
答案 1 :(得分:0)
为了有效查找,set
仅适用于可散列类型。特别是,可清洗类型必须是不可变的,这意味着它们在构造之后可能不会被更改。由于您可以在列表中追加元素和从列表中删除元素,因此它是可变的。相比之下,tuple
在构造后是固定的并且可以清洗。
因此,如果你真的想要一组单词序列,你必须将每行的单词从列表转换为元组:
with open("test.txt", "r") as z:
wordList = set(tuple(line.rstrip().split()) for line in z if line.startswith("c"))
修改:如果您想要以" c"开头的行中的所有单词集合,请使用以下内容:
with open("test.txt", "r") as z:
wordList = set(w for line in z if line.startswith("c") for w in line.rstrip().split())