0
def most_popular_guests(file_in):
    f=file(file_in,'r')
    listoflines=f.readlines()
    D={}
    dict={}
    title=''

    for lines in listoflines:
        if (lines.isupper()):
            title=lines
        else: 
            lines=lines.split(":")
            names=(lines[1]).split(",")
        for name in names:
            if D.has_key(name):
                D[name].append(Show_Appearance(title,lines[0]))
            else:
                D[name]=[Show_Appearance(title,lines[0])]
                break

    dict=longest(D)


def longest(D):    
    max=0
    d={}
    for name in D.keys():
        value = D[name]
        if max<len(value):
            max=len(value)

    for keys in D.keys:
        value=D[keys]
        if len(value)==max:
            d[key]=value

    return d

我试图找到一本字典,其中最常出现的人作为键,该人的节目列表作为值。保持此列表索引超出范围错误。

4

1 回答 1

3

脚本的一般问题是它做出了错误的假设并且没有准备好处理假设结果不正确的情况:)

更具体地说,lines.split(":")不能保证返回至少 2 个元素长的列表,而其余代码只是盲目地假设访问行 [0] 和行 [1] 是安全的。

具体如何处理取决于您的目标——您可能希望忽略此类输入、停止脚本或记录警告。像这样的东西会跳过格式错误的行:

        lines=lines.split(":")
        if len(lines) < 2:
            print "Woops, bad line: %s" % lines
            continue
于 2012-05-17T03:51:51.653 回答