在字典中迭代字典的键时出现错误:0

2024-06-15 08:41:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我想删除每个队得分最低的人。但我总是得到一个键错误: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工具或列表理解)


Tags: inanforifnames错误rangeblue
3条回答

你的问题是你是在按索引循环,这是字典没有的。你需要按键循环,然后做你想做的任何处理。在

for pname, pinfo in Players.iteritems()

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

Players没有这些键中的任何一个。在

更不用说你试图在字典中创建某种形式的order,根据定义,它是一种无顺序的数据结构。在这条路上有疯狂。在

你应该这样做:

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]

玩家的指纹是: {'Jef':{'Score':7,'Team':'Blue'},'An':{'Score':6,'Team':'Red'}
乔被撤职了。在

相关问题 更多 >