Python - 将变量分配给json列表

时间:2018-05-07 18:01:15

标签: python python-2.7 list

我一直想把这个拿出来, 所以有这个api我试图从中获取信息,比如游戏分数。

api列表内容如下所示:

[
  {
    "team_id": "FALCONS",
    "time_data": "2018-05-06T15:25:36.9524691Z",
    "wins": 11,
    "crow_size": 19563,
    "last_game": {
      "time_data": "2018-05-06T15:17:16.0000000Z",
      "data": "4e7a-bf0c-a97e5f32f58b",
      "take_side": "NA"
    }
  },
  {
    "team_id": "CARDINALS",
    "time_data": "2018-05-06T15:25:36.9212380Z",
    "wins": 14,
    "crow_size": 26000,
    "last_game": {
      "time_data": "2018-05-06T15:25:25.6850000Z",
      "data": "42ec-8326-445a22ea460f",
      "take_side": "NA"
    }
  },
  {
    "team_id": "BUFFALO",
    "time_data": "2018-05-06T15:25:36.7961978Z",
    "wins": 16,
    "crow_size": 34200,
    "last_game": {
      "time_data": "2018-05-06T15:07:50.0000000Z",
      "data": "44b7-86c1-6b969fccbe2e",
      "take_side": "NA"
    }
  }
]

我正在尝试打印从最高胜利到最低胜利的分数:

BUFFALO 16
CARDINALS 17
FALCONS 11

这是一个非常大的列表,所以我只想要特定数量的团队, 现在我只能得到这个分数:

import requests
import json
import time
import datetime
import heapq
from pprint import pprint


url = 'api url'
getscore = requests.get(url)
getscore = json.loads(getscore.content)


lookup = ["CARDINALS", "BUFFALO"]



for x in getscore:
    for ex in lookup:
        if ex == x["team_id"]:
            print(x["team_id"], x["wins"])

使用上面的代码我可以得到分数但没有组织, 所以我想从最高胜利到最低胜利, 我希望得到更多的帮助。

是否有可能获得最高分/最低分之间的百分比差异?像这样的东西

BUFFALO 16       percentage difference is = 10 percent
CARDINALS 17
FALCONS 11

谢谢你们的回复

3 个答案:

答案 0 :(得分:3)

使用list comprehensionsort

lookup = ["CARDINALS", "BUFFALO"]
data = [(x["team_id"], x["wins"]) for x in getscore if x["team_id"] in lookup]
data.sort(key=lambda x: x[1], reverse=True)
print(data)

<强> Outout:

[('BUFFALO', 16), ('CARDINALS', 14)]

答案 1 :(得分:0)

这个怎么样:

def lookup(N, data):
    arranged = sorted(data, key = lambda x: ~x.get('wins'))
    for val in arranged[:N]:
        yield val['team_id'], val['wins']

parsed = lookup(3, data)

for p in parsed:
    print p

('BUFFALO', 16)
('CARDINALS', 14)
('FALCONS', 11)

答案 2 :(得分:0)

好吧,我认为我可以提供帮助,回答你的问题,组织,以及获得百分比差异。

  1. 组织。
  2. 因此,如果您想要从最高到最低排序结果,则需要使用 排序 功能。你会怎么做?好吧,这是一个如何对python对象列表进行排序的示例。

    my_teams = [
      {
        "team_id": "FALCONS",
        "time_data": "2018-05-06T15:25:36.9524691Z",
        "wins": 11,
        "crow_size": 19563,
        "last_game": {
          "time_data": "2018-05-06T15:17:16.0000000Z",
          "data": "4e7a-bf0c-a97e5f32f58b",
          "take_side": "NA"
        }
      },
      {
        "team_id": "CARDINALS",
        "time_data": "2018-05-06T15:25:36.9212380Z",
        "wins": 14,
        "crow_size": 26000,
        "last_game": {
          "time_data": "2018-05-06T15:25:25.6850000Z",
          "data": "42ec-8326-445a22ea460f",
          "take_side": "NA"
        }
      },
      {
        "team_id": "BUFFALO",
        "time_data": "2018-05-06T15:25:36.7961978Z",
        "wins": 16,
        "crow_size": 34200,
        "last_game": {
          "time_data": "2018-05-06T15:07:50.0000000Z",
          "data": "44b7-86c1-6b969fccbe2e",
          "take_side": "NA"
        }
      }
    ]
    

    现在要从最高胜利到最低胜利进行排序,请执行以下操作:

    my_teams = list(sorted(my_teams, key=itemgetter('wins'), reverse=True))
    

    上面的snipet所做的是它将使用 wins 键对列表进行排序,返回一个有序集合,然后将其转换回列表。请注意,有 反向 关键字,这用于从最高到最低(降序)排序,因为默认情况下,排序将从最低到最高(升序)

    需要注意的另一件事是 itemgetter 。这是一个操作符的方法,因此您必须从操作符顶部导入它:

    from operator import itemgetter
    
    1. 获得百分比差异。
    2. 现在您已经对内容进行了排序。要获得百分比差异,只需执行以下操作:

      percentage_difference = my_teams[0].get('wins') - my_teams[-1].get('wins')
      

      my_teams [0] .get(&#39; wins&#39;) 表示您从新的排序列表中获取第一项,然后获取#&# 39; s 获胜属性。然后你减去最后一项&#39; s (my_teams [-1] .get(&#39; wins&#39;)) wins 属性。

      如果我能够帮助你,请告诉我。