2012-10-30 56 views
-5
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 

Output 

KeyError: ('R','K') 

有人能說出爲什麼我收到這個錯誤?當len(freqsetlist)大於1時發生錯誤。這就是當用3個元素計算元組時置信度計算的關聯規則

+4

你不能。但它只是代碼中的表示,所以你爲什麼試圖實現這一點? – Junuxx

+0

你的用例是什麼?做一些像str(k)[: - 2] +')'這樣的事情是愚蠢的......所以,你想要什麼? – jro

+1

順便說'( '麪包車')'是_String_,和'( '麪包車',)'是一個元組。 –

回答

4

這就是對象的表示,如果你想要一個不同的表示,你必須自己構造它:

>>> k = ['van'] 
>>> "({})".format(", ".join(k)) 
'(van)' 

注意,這意味着你使用一個對象作爲你的程序的一部分的Python的代表性,這是一個壞主意,你應該始終構建您手動需要什麼,而不是嘗試使用Python的代表性,這是用於調試。

編輯:逗號表示這是一個元組,如括號默認表示操作,而不是元組的分組Python的方式。如果您真的想要,您可以創建自己的元組子類並更改__repr__()/__str__(),但這會非常毫無意義(對於__repr__(),因爲它應該對該對象進行評估,所以它是無意義的)。

+0

但這將其轉換爲字符串... – avasal

+2

@avasal如果你不希望它是一個字符串,那麼爲什麼用逗號回事? –

+2

'(「麪包車」,)'也是對象的字符串表示。 –

0
supportData = {('nas','fat'): 0.5, ('nas'): 1.0, ('fat'):0.6, ('van'):0.72, ('jos'):0.55,('van','jos'):0.10} 

    itemSets = [('nas','fat'),('van','jos')] 

    for freqSet in itemSets: H = [''.join(list(item)) for item in freqSet] 

    for conseq in H: 

    freqsetlist = list(freqSet) 
    freqsetlist.remove(conseq) 
    conf = supportData[freqSet]/supportData[tuple(freqsetlist)[0]]