Python为json分配变量

2024-03-29 06:58:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在想这个问题, 所以有一个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

谢谢你们的回复


Tags: importapiiddatasizetime分数team
3条回答

好吧,我想我可以帮你,回答你的两个问题,组织,以及获得百分比差异。你知道吗

  1. 组织。你知道吗

因此,如果您想对结果从高到低排序,那么您需要使用排序函数。你打算怎么办?好吧,下面是一个如何对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键对列表进行排序,返回一个已排序的集,然后将其转换回列表。请注意,有一个reverse关键字,用于从最高到最低(降序)排序,因为默认情况下,排序将从最低到最高(升序)

另一个需要注意的是itemgetter。这是运算符的一种方法,因此必须从运算符的顶部导入:

from operator import itemgetter
  1. 获取百分比差异。你知道吗

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

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

我的团队[0].get('wins')表示从新排序的列表中获取第一个项目,然后获取它的wins属性。然后减去最后一项的(我的团队[-1].get('wins'))wins属性。你知道吗

如果我能帮助你,请告诉我。你知道吗

使用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)

输出:

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

这个怎么样:

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)

相关问题 更多 >