2012-10-30 57 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]]