supportData = {('ELF'): 0.75, ('CAT'): 0.75, ('BAT', 'CAT', 'ELF'): 0.5, ('ARK', 'BAT'): 0.25, ('ARK', 'ELF'): 0.25, ('CAT', 'ELF'): 0.5, ('DOG'): 0.25, ('BAT', 'CAT'): 0.5, ('BAT', 'ELF'): 0.75, ('ARK'): 0.5, ('ARK', 'CAT'): 0.5, ('BAT'): 0.75}
L = [('ARK'), ('CAT'), ('CAT'), ('ELF'),('ARK', 'CAT'), ('BAT', 'ELF'), ('BAT', 'CAT'), ('CAT', 'ELF'),('BAT', 'CAT', 'ELF')]
for freqSet in L:
H = list(freqSet)
if len(H) == 1:
pass
else:
for conseq in H:
freqsetlist = list(freqSet)
freqsetlist.remove(conseq)
if len(freqsetlist) == 1:
conf = supportData[freqSet]/supportData[tuple(freqsetlist)[0]]
if conf >= 0.1:
print freqsetlist,'-->',conseq,'conf:',conf
else:
conf = supportData[freqSet]/supportData[tuple(freqsetlist)[:]]
if conf >= 0.1:
print freqsetlist,'-->',conseq,'conf:',conf
KeyError: ('R','K')
有人可以指出我收到此错误的原因吗?当len(freqsetlist)是>时,似乎发生错误。那是用3元素计算元组时的
答案 0 :(得分:0)
当一个元组只有一个元素时,你应该在它后面加一个逗号,这样它就会被解释为一个元组,而不是一个单独的(带括号的)元素:
'CAT' == ('CAT') != ('CAT',) == tuple(['CAT'])
由于你的supportData
和L
变量当前正在混合使用字符串和元组(当你猜想,只想拥有元组时),例如这行代码永远不会运行:
if len(H) == 1:
pass
更新:,对于您的错误消息,请取第一个元素('ARK')
:您首先将其转换为列表(['A', 'R', 'K']
),然后删除第一个元素( 'A'
),然后将结果转换回元组 - 产生('R', 'K')
。当您尝试在supportData
dict(在您提到的同一行代码中)查找时,它不在那里,因此KeyError
。
按照我的解释纠正您的数据,并避免这个特殊错误:
supportData = {('ELF',): 0.75, ('CAT',): 0.75, ('BAT', 'CAT', 'ELF'): 0.5, ('ARK', 'BAT'): 0.25, ('ARK', 'ELF'): 0.25, ('CAT', 'ELF'): 0.5, ('DOG',): 0.25, ('BAT', 'CAT'): 0.5, ('BAT', 'ELF'): 0.75, ('ARK',): 0.5, ('ARK', 'CAT'): 0.5, ('BAT',): 0.75}
L = [('ARK',), ('CAT',), ('CAT',), ('ELF',),('ARK', 'CAT'), ('BAT', 'ELF'), ('BAT', 'CAT'), ('CAT', 'ELF'),('BAT', 'CAT', 'ELF')]