Python 使用返回的.json()对象作为第二个.json()对象的.format()语句的一部分
我正在使用for循环提交一系列xhr请求以更改其参数,如下所示:Python 使用返回的.json()对象作为第二个.json()对象的.format()语句的一部分,python,json,python-requests,Python,Json,Python Requests,我正在使用for循环提交一系列xhr请求以更改其参数,如下所示: import json import requests import jsonobject for i in range(0, 1): #set to 1 rather than three to making demonstration easier if i == 0: var = "0" var2 = "Home" elif i == 1: var = "1
import json
import requests
import jsonobject
for i in range(0, 1): #set to 1 rather than three to making demonstration easier
if i == 0:
var = "0"
var2 = "Home"
elif i == 1:
var = "1"
var2 = "Away"
elif i == 2:
var = "2"
var2 = "Overall"
url = 'http://www.whoscored.com/StatisticsFeed/1/GetPlayerStatistics'
params = {
'category': 'tackles',
'subcategory': 'success',
'statsAccumulationType': '0',
'isCurrent': 'true',
'playerId': '',
'teamIds': '',
'matchId': '',
'stageId': '9155',
'tournamentOptions': '2',
'sortBy': 'Rating',
'sortAscending': '',
'age': '',
'ageComparisonType': '',
'appearances': '',
'appearancesComparisonType': '0',
'field': var2, #parameter from for loop
'nationality': '',
'positionOptions': "'FW','AML','AMC','AMR','ML','MC','MR','DMC','DL','DC','DR','GK','Sub'",
'timeOfTheGameEnd': '5',
'timeOfTheGameStart': '0',
'isMinApp': '',
'page': '1',
'includeZeroValues': '',
'numberOfPlayersToPick': '1'
}
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest',
'Host': 'www.whoscored.com',
'Referer': 'http://www.whoscored.com/'}
responser = requests.get(url, params=params, headers=headers)
responser = responser.json()
print "responser = ",responser #contents of .json() object
playerTableStats = responser[u'playerTableStats'] #json sub object to be parsed
statColumns = responser[u'statColumns'][3:] #json sub object to pass to .format() statement
statColumns = ''.join('{' + x + '}' for x in statColumns)
print "statColumns = ",statColumns
for statDict in playerTableStats:
var = (statColumns.format(**statDict)) #statColumns object passed to .format() statement
print "var = ",var
对于每个responer.json()对象,都有两个嵌套组件。第一个,statColumns
可以作为.format()语句的一部分来映射第二个,名为playerTableStats
。因此,您可以看到此代码正在执行的操作,下面是打印的输出:
responser = {u'statColumns': [u'apps', u'subOn', u'minsPlayed', u'tackleWonTotal',
u'challengeLost', u'tackleTotalAttempted'], u'paging': {u'firstRecordIndex': 1, u'resultsPerPage': 1,
u'lastRecordIndex': 1, u'totalPages': 431, u'currentPage': 1, u'totalResults': 431},
u'playerTableStats': [{u'positionText': u'Defender', u'rating': 8.37, u'weight': 77, u'playerId':
22079, u'height': 188, u'teamId': 32, u'playedPositions': u'-DC-', u'challengeLost': 0.0,
u'isManOfTheMatch': False, u'isOpta': True, u'subOn': 0, u'tackleWonTotal': 2.0,
u'tournamentShortName': u'EPL', u'apps': 1, u'teamName': u'Manchester United',
u'tournamentRegionId': 252, u'regionCode': u'gb-nir', u'tournamentRegionCode': u'gb-eng',
u'playedPositionsShort': u'D(C)', u'seasonId': 4311, u'ranking': 1, u'minsPlayed': 90,
u'tournamentName': u'Premier League', u'isActive': True, u'name': u'Jonny Evans', u'firstName':
u'Jonny', u'lastName': u'Evans', u'age': 26, u'seasonName': u'2014/2015', u'tournamentId': 2,
u'tackleTotalAttempted': 2.0}]}
statColumns = {tackleWonTotal}{challengeLost}{tackleTotalAttempted}
var = 2.00.02.0
打印在statColumns=
语句中的playerTableStats
元素我希望看到打印为:
2.0,0.0,2.0
而不是:
2.00.02.0
…这是我得到的。有人能看出我做错了什么吗
谢谢我没有仔细阅读您的代码,但在我看来您应该
。用逗号而不是空字符串连接
:
statColumns = ','.join('{' + x + '}' for x in statColumns)
# ^ comma here, not empty string.
否则,您的格式语句看起来像
'{minsPlayed}{tacklewonttal}…
而不是'{minsPlayed},{tacklewonttal},…'
如果您想要逗号,为什么要使用'.join(…)
而不是,'.join(…)
?@mgilson…谢谢您的回复。是的,这很有效。我不知道为什么我没有注意到我是这样加入的。我想小数点的位置让我的大脑感到困惑@gdogg371——发生在我们当中最好的人身上:-)。