Python ';int';对象不可重写

Python ';int';对象不可重写,python,Python,所以每次我尝试使用Point.top()命令时,我都会得到: 'int' object is not subscriptable 这就是代码: def top(): datalist = sorted(Point.dPoint.items(), key=lambda x: x[1][0], reverse=True) t = 1 top = [] for l in datalist: top.append(l[0].title()+": "+s

所以每次我尝试使用
Point.top()
命令时,我都会得到:

 'int' object is not subscriptable
这就是代码:

def top():
    datalist = sorted(Point.dPoint.items(), key=lambda x: x[1][0], reverse=True)
    t = 1
    top = []
    for l in datalist:
        top.append(l[0].title()+": "+str(l[1][0])+(" point" if l[1][0] > 1 else " points"))
        if t == 15:
             break
        t+=1
    return top
这在文件中,以及文件的保存方式:

charles 45
tim 32
bob 67
我不知道为什么那个错误总是发生。该代码被假定为获得得分最高的前15名。它将返回以下内容:

["Bob: 67 points", "Charles: 45 points", "Tim: 32 points"]

其中一个变量是
int
,您正在执行
变量[0]
,这是
int
无法执行的

Python 3.3.2 (default, Aug 25 2013, 14:58:58) 
[GCC 4.2.1 Compatible FreeBSD Clang 3.1 ((branches/release_31 156863))] on freebsd9
Type "help", "copyright", "credits" or "license" for more information.

>>> a = 42
>>> a[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not subscriptable
>>> type(a)
<class 'int'>
>>> 
Python 3.3.2(默认,2013年8月25日,14:58:58)
[GCC 4.2.1在freebsd9上兼容FreeBSD Clang 3.1((分支/发行版31156863))]
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
>>>a=42
>>>a[0]
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:“int”对象不可下标
>>>类型(a)
>>> 

我建议让代码更加明确,例如:

def top():
    player_points_couples = sorted(Point.dPoint.items(), key=lambda player_point_couple: player_point_couple[1][0], reverse=True)
    top_players_number = 1
    top_players = []
    for player, points in player_points_couples :
        top_players.append(player.title()+": "+str(points[0])+(" point" if points[0] > 1 else " points"))
        if top_players_number == 15:
             break
        top_players_number += 1
    return top_players 
这样,你会发现奇怪的表达方式:

player_point_couple[1][0]
...
points[0]
意思是“点”的第一个元素。。。但是“点数”是一个数字,里面没有任何元素

编辑 只想进入pythonic风格:

def top():
    from operator import itemgetter
    player_points_couples = sorted(Point.dPoint.items(), key=itemgetter(1), reverse=True)

    string_template_singular = "%s: %d point"
    string_template_plural = "%s: %d points"
    top_players = []
    for player, points in player_points_couples[:15]:
        string_template = string_template_plural if points > 1 else string_template_singular
        top_players.append(string_template % (player.title(), points))

    return top_players 

但是你知道这个错误是什么意思吗?从那里,它是简单的演绎…不是真的。我只知道这是一个int对象错误。
int
是对象,而您试图对其执行
[index]
。[…]?你能解释一下吗?访问容器中的元素…我不知道你想说什么。错误也可能出现在
x
变量中,您没有用行号发布完整错误(您甚至没有复制/粘贴精确的错误,因为它包含打字错误)。
l[0]
不会导致此错误。检查
l[1]
x[1]
那么如果我做了str(x[1][0]),会怎么样?我想那可以解决它。也许?我不知道您的数据是什么样子,也不知道
Point.top
是什么;首先要清楚地了解数据的外观(您可以使用
print
查看数据的外观),然后对其进行推理。不,这不会解决问题。看来你还是不明白。调试101:
打印
。很好。这实际上看起来比我得到的要干净得多xDI似乎没有operator.py。你知道我在哪里能买到吗?