简体   繁体   English

使用Python对JSON响应进行排序

[英]Sorting JSON response with Python

Need to help to figure out how to sort JSON reponse by highest to lowest number, for example. 例如,需要帮助弄清楚如何按最高到最低编号对JSON响应进行排序。 here is part of JSON reponse below: 这是下面JSON响应的一部分:

{
"queue": "RANKED_SOLO_5x5",
"name": "Riven's Cutthroats",
"entries": [
  {
     "leaguePoints": 812,
     "isFreshBlood": false,
     "isHotStreak": false,
     "division": "I",
     "isInactive": false,
     "isVeteran": false,
     "losses": 277,
     "playerOrTeamName": "CLG Bunso",
     "playerOrTeamId": "19732914",
     "wins": 356
  },
  {
     "leaguePoints": 567,
     "isFreshBlood": false,
     "isHotStreak": false,
     "division": "I",
     "isInactive": false,
     "isVeteran": false,
     "losses": 56,
     "playerOrTeamName": "SKT Frost",
     "playerOrTeamId": "66401633",
     "wins": 160
  },
  {
     "leaguePoints": 751,
     "isFreshBlood": false,
     "isHotStreak": false,
     "division": "I",
     "isInactive": false,
     "isVeteran": true,
     "losses": 421,
     "playerOrTeamName": "C9 Hard",
     "playerOrTeamId": "47836799",
     "wins": 494
  },
  {
     "leaguePoints": 587,
     "isFreshBlood": false,
     "isHotStreak": true,
     "division": "I",
     "isInactive": false,
     "isVeteran": false,
     "losses": 157,
     "playerOrTeamName": "ShadowFiendv",
     "playerOrTeamId": "71181475",
     "wins": 265
  },
  {
     "leaguePoints": 1109,
     "isFreshBlood": false,
     "isHotStreak": false,
     "division": "I",
     "isInactive": false,
     "isVeteran": true,
     "losses": 353,
     "playerOrTeamName": "ApoIlo Price",
     "playerOrTeamId": "7250",
     "wins": 425
  },

Now, I already grabbed the necessary info i needed, as below: 现在,我已经获取了所需的必要信息,如下所示:

def getChallengerLadder(region, APIKey):
    URL = "https://" + region + ".api.pvp.net/api/lol/" + region +     "/v2.5/league/challenger?type=RANKED_SOLO_5x5&api_key=" + APIKey
    print (URL)
    response = requests.get(URL)
    return response.json()


   responseJSON3 = getChallengerLadder(region, APIKey)
    x = 0
    while True:
        print (responseJSON3['entries'][x]['leaguePoints'], responseJSON3['entries'][x]['playerOrTeamName'] )
         x += 1

As a result i get a list as follows (again, below is only a small sample): 结果,我得到如下列表(再次,下面只是一个小样本):

608 Z Y Xydra
552 Silas Kroeger
1109 ApoIlo Price
601 Blem
587 Boy vs Girl
701 l am Bjerg
560 duo to homecomin

I want to sort this list from largest to smallest number, but i cant figure out how to do it. 我想将此列表从最大到最小排序,但是我不知道该怎么做。 Any help would be appreaciated! 任何帮助将不胜感激! IS there a better way to do it then i already done? 有没有更好的方法可以做到这一点呢? I assume you would have to put the response in the array and sort the array? 我假设您必须将响应放入数组并对数组进行排序? Or is there a better way to do it? 还是有更好的方法呢?

Sorted by leaguePoints leaguePoints排序

(I use json module only to create full working example) (我仅使用json模块来创建完整的工作示例)

text = '''{
"queue": "RANKED_SOLO_5x5",
"name": "Riven's Cutthroats",
"entries": [
  {
     "leaguePoints": 812,
     "isFreshBlood": false,
     "isHotStreak": false,
     "division": "I",
     "isInactive": false,
     "isVeteran": false,
     "losses": 277,
     "playerOrTeamName": "CLG Bunso",
     "playerOrTeamId": "19732914",
     "wins": 356
  },
  {
     "leaguePoints": 567,
     "isFreshBlood": false,
     "isHotStreak": false,
     "division": "I",
     "isInactive": false,
     "isVeteran": false,
     "losses": 56,
     "playerOrTeamName": "SKT Frost",
     "playerOrTeamId": "66401633",
     "wins": 160
  },
  {
     "leaguePoints": 751,
     "isFreshBlood": false,
     "isHotStreak": false,
     "division": "I",
     "isInactive": false,
     "isVeteran": true,
     "losses": 421,
     "playerOrTeamName": "C9 Hard",
     "playerOrTeamId": "47836799",
     "wins": 494
  },
  {
     "leaguePoints": 587,
     "isFreshBlood": false,
     "isHotStreak": true,
     "division": "I",
     "isInactive": false,
     "isVeteran": false,
     "losses": 157,
     "playerOrTeamName": "ShadowFiendv",
     "playerOrTeamId": "71181475",
     "wins": 265
  },
  {
     "leaguePoints": 1109,
     "isFreshBlood": false,
     "isHotStreak": false,
     "division": "I",
     "isInactive": false,
     "isVeteran": true,
     "losses": 353,
     "playerOrTeamName": "ApoIlo Price",
     "playerOrTeamId": "7250",
     "wins": 425
  }
]
}'''

import json

# simulate `getChallengerLadder`
responseJSON3 = json.loads(text)

result = sorted(responseJSON3['entries'], key=lambda x:x['leaguePoints'])

print result

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM