2013-01-12 77 views
1

我想將列表轉換爲字符串,但它包含整數。它的工作原理現在,反正這是代碼:將包含整數的列表轉換爲字符串

for player in basicPlayers: 
    say('Name' + str(player['name']) + 'score' + str(player['score'])) 

的sooo是的,我想讓它像

Player1 (2), Player2 (4), Player3 (6) 

Player1 (2) 
Player2 (4) 
Player3 (6) 

是獲取數據的代碼:

def getBasicPlayers(self): # Finished 
     """Returns a list containing a dictionary for each player: 
     [ 
      { 
       'name' : string, 
       'score' : integer, 
      }, 
      { 
       'name' : string, 
       'score' : integer, 
      }, 
     ] 
     Note: This will return an empty list if the player count is above 100.""" 
     packet = self.assemblePacket("c") 
     self.send(packet) 

     reply = self.receive() 
     reply = reply[11:] # Clean up bytes 
     players = [] 

     strLen = struct.unpack("<h", reply[0:2]) 
     playerCount = strLen[0] 

     reply = reply[2:] # Clean up bytes 

     for i in range(playerCount): 
      players.append({'name' : '', 'score' : 0}) 

     pointer = 0 

     for player in players: 
      strLen = ord(reply[pointer:(pointer + 1)]) 

      name = reply[(pointer + 1):(pointer + (strLen + 1))] 

      temp = struct.unpack("<i", reply[(pointer + (strLen + 1)):(pointer + (strLen + 5))]) 
      pointer += (strLen + 5) 

      player['name'] = name 
      player['score'] = temp[0] 

     return players 
+0

又是什麼問題?您的示例'Player1(2),Player2(4)...'與您的打印不匹配。 – 2013-01-12 18:03:45

+0

沒有問題,我只是不知道如何將其轉換爲字符串,所以它不會是一個列表。我嘗試使用.join,但它包含整數,並且我讀了一些地方,如果它包含整數,它就不可能.join(也可以用'it works'表示代碼有效,沒有問題) – RewriteRule

回答

2

怎麼樣
', '.join('Name %(name)s Score %(score)d' % player for player in basicPlayers) 

注意join採取任何迭代作爲它的參數,在這種情況下,我們通過發電機表達它。


例如:

basicPlayers = [{'name' : 'Bob','score' : 42}, {'name' : 'Joe','score' : 24}] 

print ', '.join('Name %(name)s Score %(score)d' % 
              player for player in basicPlayers) 
 
Name Bob Score 42, Name Joe Score 24 
+2

這可能是值得解釋的這利用了[生成器表達式](http://www.youtube.com/watch?v=pShL9DCSIUw)。 –

+1

是的,謝謝! – RewriteRule

1

這是更好地使用format功能,我想。

>>> basicPlayers = [{'name': 'John', 'score': 1}, {'name': 'Mary', 'score': 2}] 
>>> ', '.join(('{name} ({score})'.format(**player) for player in basicPlayers)) 
'John (1), Mary (2)' 
相關問題