1

我想删除每个团队得分最低的人。但我总是得到一个 KeyError: 0

Players = {'An': {'Team ':'Red','Score':6 }, 'Jef': {'Team':'Blue','Score': 7 },'Jos': {'Team':'Red','Score':5 }}
names= Players.keys()
for i in range (len(names)):
      if Players[i]["Team"] == Players[i+1]["Team"] :
          if Players[i]['Score'] > PLayers[i+1]['Score']:
            Players.remove(Players[i+1])

有谁知道我犯了哪个错误?(作为记录,我知道这段代码效率很低,但是对于这个项目,我不能使用大多数 Python 工具或列表理解例如)

4

6 回答 6

2

你应该这样做:

Players = {'An': {'Team':'Red','Score':6 }, 'Jef': {'Team':'Blue','Score':7 },'Jos': {'Team':'Red','Score':5 }}
names = Players.keys()
player_to_remove = []
for i in range(0, len(names) - 1):
    for j in range(i + 1, len(names)):
        if Players[names[i]]['Team'] == Players[names[j]]['Team'] :
            if Players[names[i]]['Score'] < Players[names[j]]['Score']:
                player_to_remove.append(names[i])
            if Players[names[i]]['Score'] > Players[names[j]]['Score']:
                player_to_remove.append(names[j])
for key in player_to_remove:
    del Players[key]

我们的 Players 打印是:{'Jef': {'Score': 7, 'Team': 'Blue'}, 'An': {'Score': 6, 'Team': 'Red'}}
Joe has被移除。

于 2015-05-02T18:33:58.630 回答
1

for i in range(len(names))0, 1, 2, 3, ...

Players没有这些钥匙。

更不用说您正在尝试在字典中创建某种顺序,根据定义,它是一种无序的数据结构。沿着这条路走下去就是疯狂。

于 2015-05-02T18:15:56.233 回答
1

您的问题是您正在按索引循环,而字典不存在该索引。您需要按键循环,然后执行您想做的任何处理。

for pname, pinfo in Players.iteritems()
于 2015-05-02T18:17:26.073 回答
0

在第一个for循环中,索引是一个整数。然后,您尝试访问Players[i]: 是不可能的,因为 的键Players只是字符串。特别是,调用 Players[0] 会导致错误:“0”键不存在。KeyError 来自于此。

相反,您应该使用for key in Players.keys():

于 2015-05-02T18:16:04.610 回答
0

您没有在那些字典中指定键。

Players = {'An': {'Team ':'Red','Score':6 }, 'Jef': {'Team':'Blue','Score': 7 },'Jos': {'Team':'Red','Score':5 }}
names= Players.keys()
for i in range (len(names)): # range will give you the integer, not the key in Players dict.
      if Players[i]["Team"] == Players[i+1]["Team"] : # eg: for 1st loop you will get Players[0]["Team"] is not present in Players dict, will throw the key error.
          if Players[i]['Score'] > PLayers[i+1]['Score']:
            Players.remove(Players[i+1])
于 2015-05-02T18:16:49.590 回答
0

您正在尝试将 dict 索引Players为列表。利用:

for player in Players:

另外请不要大写Players,因为它使它看起来像一个类。

于 2015-05-02T18:17:10.987 回答