Процентное изменение в словаре Json - PullRequest
0 голосов
/ 31 мая 2018

Я изучаю Python и хочу понять, как присвоить значение в порядке возрастания и убывания двум различным переменным.

В этом случае я бы использовал обе переменные: одна с наивысшей победой, другая ссамые низкие выигрыши, чтобы получить процентное изменение:

содержимое списка 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"
    }
  },
  {
    "team_id": "COWBOYS",
    "time_data": "2018-05-06T15:25:36.9524691Z",
    "wins": 21,
    "crow_size": 15563,
    "last_game": {
      "time_data": "2018-05-06T15:17:16.0000000Z",
      "data": "4e7a-bf0c-a97e5f32f58b",
      "take_side": "NA"
    }
  },
  {
    "team_id": "DETROIT-LIONS",
    "time_data": "2018-05-06T15:25:36.9212380Z",
    "wins": 17,
    "crow_size": 23000,
    "last_game": {
      "time_data": "2018-05-06T15:25:25.6850000Z",
      "data": "42ec-8326-445a22ea460f",
      "take_side": "NA"
    }
  },
  {
    "team_id": "DOLPHINS",
    "time_data": "2018-05-06T15:25:36.7961978Z",
    "wins": 22,
    "crow_size": 24200,
    "last_game": {
      "time_data": "2018-05-06T15:07:50.0000000Z",
      "data": "44b7-86c1-6b969fccbe2e",
      "take_side": "NA"
    }
  }
]

Это действительно большой список, поэтому я хочу только определенное количество команд, а не всетак что тогда я могу сделать свою математическую замену в процентах

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


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

data.sort(key=operator.itemgetter('wins'), reverse=True)


lookup = ["CARDINALS", "BUFFALO", "DOLPHINS", "COWBOYS"]



for item in data:
    teamname = item["team_id"]
    winstreak = item["wins"]
    for ex in lookup:
        if ex == teamname:
            print(teamname, winstreak)

Итак, что я могу сделать, это распечатать только ключ и значение с помощью приведенной выше формулы, может кто-нибудь помочь мне получить процентное изменениесамые высокие выигрыши к самым низким победам?

Ответы [ 3 ]

0 голосов
/ 31 мая 2018

Как-то так может помочь:

lookup = ["CARDINALS", "BUFFALO", "DOLPHINS", "COWBOYS"]

wins = {}  # dictionary for team wins

for item in data:
    teamname = item["team_id"]
    winstreak = item["wins"]
    for ex in lookup:
        if ex == teamname:
            wins.update({teamname: winstreak}) # add team wins to dictionary
            print(teamname, winstreak)

low = min(wins.values())   # minimum of team wins
high = max(wins.values())  # maximum of team wins
print('low: {}, high: {}'.format(low, high))
print('percent difference: {}'.format(float(high-low)/low)) # print the percentage

вывод:

CARDINALS 14
BUFFALO 16
COWBOYS 21
DOLPHINS 22
low: 14, high: 22
percent difference: 0.571428571429
0 голосов
/ 31 мая 2018
from __future__ import division # for python 2

hWin = None
for item in data:
    teamname = item["team_id"]
    winstreak = item["wins"]
    if teamname in lookup:
        if not hWin:
            hWin = winstreak
        percentChange = (hWin - winstreak) / hWin * 100
        print(teamname, winstreak,  '%i%%' % percentChange)

приведет

('DOLPHINS', 22, '0%')
('COWBOYS', 21, '4%')
('BUFFALO', 16, '27%')
('CARDINALS', 14, '36%')
0 голосов
/ 31 мая 2018

Учитывая ваш диапазон команд, вы можете использовать min и max:

import json
lookup = ["CARDINALS", "BUFFALO", "DOLPHINS", "COWBOYS"]
url = 'api url'
data = requests.get(url)
team_data = json.loads(data.content)
new_teams = [i for i in team_data if i['team_id'] in lookup]
min_win = min(new_teams, key=lambda x:x['wins'])['wins']
max_win = max(new_teams, key=lambda x:x['wins'])['wins']
change_win = (max_win-min_win)/float(min_win+max_win)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...