【发布时间】:2018-08-25 17:04:21
【问题描述】:
这里是 Python 菜鸟。
我有两个元组列表字典:my_gold_mentions,其中包括我的黄金数据,my_coref,其中包括自动生成的数据。
这两个字典看起来像这样:
{'Anakin': [(6532, 6538),
(6590, 6592),
(6673, 6675)],
'He': [(3600, 3602),
(3609, 3612)],...} # etc.
我正在尝试通过将自动生成的字典的元组与黄金数据的元组进行比较来计算 F 分数。
如果有一个元组匹配,那么我想检查这两个匹配的元组是否具有相同的键,在这种情况下:共享字符的名称,例如'Anakin'。
如果是这样:则将 True Positives 计数加 1。
如果键不相似,但自动生成的键通常作为键存在于黄金数据字典中(在这种情况下:除'Anakin'之外的另一个字符),那么我应该认为它是两者 假阴性和假阳性。
最后,如果该键在黄金数据字典中根本不存在,则认为它只是一个假阴性。
到目前为止,我已经尝试过:
TP = 0
FP = 0
FN = 0
for gold_key, gold_value in my_gold_mentions:
for auto_key, auto_value in my_coref:
if auto_value == gold_value:
if auto_key == gold_key:
TP += 1
elif auto_key != gold_key and auto_key in my_gold_mentions:
FN += 1
FP += 1
else:
FN += 1
这看起来不是很有效,因为我收到了ValueError: too many values to unpack (expected 2)。
我不知道如何比较两个元组列表字典。
关于如何改进上述代码以实现该目标的任何想法?
非常感谢您的帮助!
【问题讨论】:
-
迭代键:值,你想要
dict.items() -
这是你应该学会调试自己的东西。几乎所有的问题都与问题无关,它是一个纯 Python 问题。尝试做
for x, y in {"a": 1, "b": 2}: pass,你会遇到同样的问题。要了解原因,请运行for thing in {"a": 1, "b": 2}: print(thing)。
标签: python list dictionary tuples