您的问题与“非字符文本”无关(实际上并不意味着什么),对象可用作 dict 键的唯一要求是它是可散列的,并且绝对没有限制您可以将其用作价值。
你的问题很简单,因为你试图获取一个不存在的键的值(这就是KeyError 的意思:你要求的键在字典中不存在)。
这里:
mydict = {}
此时,mydict 为空,因此任何项目访问都会引发 KeyError
那么你正在这样做:
dict[source_text].append(result_value)
基本上是:
something = mydict[source_text] # get value for key `source_text`
something.append(result_value)
由于您的 dict 为空,因此第一行显然会引发 KeyError。
如果您想为每个 source_text 值存储一个唯一的 result_value,那么正确的语法是:
mydict[source_text] = result_value
如果您想为每个 source_text 值存储一个 result_value 列表,那么您必须明确测试是否设置了键,如果没有使用空列表设置它,则附加到此列表:
if source_text not in mydict:
mydict[source_text] = []
mydict[source_text].append(result_value)
或者直接使用DefaultDict:
from collections import DefaultDict
mydict = DefaultDict(list)
# DefaultDict will automagically create the key with an empty list
# as value if the key is missing
mydict[source_text].append(result_value)
现在我强烈建议你花一些时间正确学习 Python(提示:官方文档中有相当不错的教程),如果你必须使用它,这将节省大家的时间。