-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

タプルに要素が 1 つしかない場合は、その後ろにコンマを置く必要があります。これにより、単一の (括弧で囲まれた) 要素としてではなく、タプルとして解釈されます。

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

あなたsupportDataL変数の両方が現在文字列とタプルを混在させているため (タプルのみが必要な場合)、たとえば次のコード行は実行されません。

if len(H) == 1:
    pass

更新:エラーメッセージについては、最初の要素を取得してください('ARK'):最初にリスト( ['A', 'R', 'K'])に変換し、次に最初の要素( )を削除し'A'てから、結果をタプル-yielingに変換しました('R', 'K')。あなたのsupportDatadictで(あなたが言及したのと同じコード行で)それを調べようとしたとき、それはそこになかったので、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 に答える