2016-01-21 51 views
0

我有2個字典。一個與當地玩家的數據和一個列出玩家分字典:從python3中的子句讀取

 class GameData: 
     def __init__(self): 
      self.player = {'id'   : 1453339642, 
          'positionX' : 123, 
          'positionY' : 0 
          } 

      self.players = {1453339642: 
            {'name'   : "Admin"} 
          } 
    gameData = GameData() 

然後,我打印出來只是爲了檢查,如果一切正常:

  for x in gameData.player: 
       print (str(x),':',gameData.player[x]) 

      print("\n\n") 

      for x in gameData.players: 
       print (str(x)) 
       for y in gameData.players[x]: 
        print (' ',y,':',gameData.players[x][y]) 
      print("\n\n") 

這導致:

  id : 1453339642 
      positionY : 0 
      positionX : 123 

      1453339642 
       name : Admin 

當我現在想要在球員中訪問球員的ID,例如

  #print(str(type(gameData.player))) 
      #print(str(type(gameData.players))) 
      print(str(type(gameData.players[1453339642]))) 

因此我得到了KEYERROR。爲什麼?

+0

行'gameData = GameData()'是否正確縮進? –

+0

是的,我只將它錯誤地複製到了stackoverflow框。正如你可以看到字典和子字典在那裏,因爲我可以打印出來。不知何故,我不能訪問一個特定的鍵? – user5526679

+0

你的打印結果有些奇怪:'positionX'應該是'123'。我重新輸入你的代碼,它的工作原理。在實例化和最終打印之間有沒有發生'gameData'的事情? –

回答

0

如果我把這個文件,它的工作原理:

class GameData: 
    def __init__(self): 
     self.player = {'id'   : 1453339642, 
         'positionX' : 123, 
         'positionY' : 0 
     } 

     self.players = {1453339642: 
         {'name'   : "Admin"} 
     } 
gameData = GameData() 
print(str(type(gameData.players[1453339642]))) 

只有凹槽從您的代碼不同。在實例化和最終的print之間必須有一些gameData發生。

+0

我現在檢查了所有類型的東西:它說播放器中的1453339642是int,但在播放器中它是一個字符串。我怎樣才能在玩家中將其轉換爲str? – user5526679

+0

是的,這絕對是我的問題,因爲它創建我的字典鍵爲字符串。這個作品: print(str(type(gameData.players [str(1453339642)])) – user5526679

+0

我不確定理解。看看你的代碼,'gameData.player ['id']'是一個int(這個值沒有引號)。 'gameData.players'中的'1453339642'也是這樣:它是一個int,因爲它周圍沒有引號。 –