-1
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) > 1 时似乎会发生错误。那是在计算具有 3 个元素的元组时

4

1 回答 1

0

当一个元组只有一个元素时,你应该在它后面加上一个逗号,这样它就会被解释为一个元组,而不是一个单独的(带括号的)元素:

'CAT' == ('CAT') != ('CAT',) == tuple(['CAT'])

由于您supportDataL变量当前都在混合字符串和元组(我猜,当您只想拥有元组时),例如这行代码将永远不会运行:

if len(H) == 1:
    pass

更新:至于您的错误消息,取第一个元素,('ARK'):您首先将其转换为列表(['A', 'R', 'K']),然后删除第一个元素('A'),然后将结果转换回产生元组的('R', 'K'). 当您尝试在您的 dict 中查找它时supportData(在您提到的同一行代码中)它不存在,因此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')]
于 2012-11-19T00:14:34.077 回答