【问题标题】:Using list elements to create .format() mapping for .json() object?使用列表元素为 .json() 对象创建 .format() 映射?
【发布时间】:2014-11-30 23:53:17
【问题描述】:

我在Requests module 中使用response.json 返回了以下对象:

{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}]}

这个对象有两个元素,playerTableStatsstatColumns。这些可以通过以下代码访问:

playerTableStats = response[u'playerTableStats']
statColumns = response[u'statColumns']

如果我将statColumns 的内容转换为字符串对象,我可以将其用作.format() 语句的一部分来映射playerTableStats。我可以这样做:

var1 = ['one','two','three','four']
var1 = 'u"{',var1[0],'}','{',var1[1],'}','{',var1[2],'}','{',var1[3],'}"'
var1 = ''.join(var1)

var2 = (var1.format(**responser))

print var2

但是,这似乎不是很 Pythonic,并且没有考虑到当我从同一站点返回不同的 .json 对象时,statColumnsplayerTableStats 的元素数量会有所不同。

有没有更简洁的方法将statColumns 的所有元素转换为格式:

u"{one}{two}{three}{four}"

谢谢

【问题讨论】:

    标签: python json list string.format


    【解决方案1】:

    str.joingenerator expression 一起使用:

    var2 = ''.join('{' + x + '}' for x in var1)
    

    【讨论】:

    • @falsetru...好吧,效果很好,谢谢。你能解释一下生成器表达式是什么意思吗?
    • @gdogg371,生成器表达式类似于列表推导,除了它生成生成器而不是列表。我为生成器表达式添加了指向 Python 教程页面的链接。点击链接了解更多详情。
    • @gdogg371,如果您不清楚,请尝试以下列表理解:['{' + x + '}' for x in var1]。您将获得['one', 'two', ...] 的列表。如果您使用生成器表达式,它将返回一个生成器,该生成器会延迟生成每个元素。
    猜你喜欢
    • 2018-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 2021-09-13
    • 1970-01-01
    • 2021-10-28
    相关资源
    最近更新 更多