Добавить новый список из циклов для возвращаемых элементов - PullRequest
0 голосов
/ 08 июня 2018

Возникла проблема с добавлением gamepk в новый список, чтобы затем устанавливать и удалять дубликаты.Моя первая проблема - просто создание нового списка.Я могу беспокоиться о наборе позже.

import csv
import requests
import datetime
from pprint import pprint
import pendulum

start = pendulum.datetime(2016, 4, 3)
end = pendulum.datetime(2016, 10, 2)
period = pendulum.period(start, end)

for dt in period.range('days'):
    day = dt.format('DD')
    month = dt.format('MM')
    year = dt.format('YYYY')
    the_date = str(month) + "/" + str(day) + "/" + str(year)

    try:
        req = requests.get('http://gd.mlb.com/components/game/mlb/year_' + str(year) + '/month_' + str(month) + '/day_' + str(day) + '/miniscoreboard.json') # 
        get_gameIds = req.json()['data']['games']['game']

        for gameId in get_gameIds:
            gamepk = gameId['game_pk']
            new_gamepk = []
            for pk in gamepk:                
                new_gamepk.append(pk)
                print(new_gamepk)

Печать gamepk после второго и последнего цикла for приводит к списку, подобному следующему:

446877
452866
446911
446873
446870
446875
446872
446876
446867
446874
446879
446871

Мне кажется, что я должен сохранить результаты gamepk в виде списка.. но я не уверен.Затем я пытаюсь добавить все эти игровые пакеты в новый список, который я затем могу назвать set, и удалить дубликаты.Я понимаю концепцию добавления, но явно не могу заставить его работать должным образом.Любая помощь и краткое объяснение имеют большое значение!

1 Ответ

0 голосов
/ 08 июня 2018

Основная идея заключается в следующем:

  • Инициализировать пустую коллекцию (список, набор) вне самого внешнего цикла
  • Как только вы нашли нужный элемент, добавьтеэто в коллекцию.

Использование списка

import csv
import requests
import datetime
from pprint import pprint
import pendulum

start = pendulum.datetime(2016, 4, 3)
end = pendulum.datetime(2016, 10, 2)
period = pendulum.period(start, end)

gamepks = []
for dt in period.range('days'):
    day = dt.format('DD')
    month = dt.format('MM')
    year = dt.format('YYYY')
    the_date = str(month) + "/" + str(day) + "/" + str(year)

    try:
        req = requests.get('http://gd.mlb.com/components/game/mlb/year_' + str(year) + '/month_' + str(month) + '/day_' + str(day) + '/miniscoreboard.json') # 
        get_gameIds = req.json()['data']['games']['game']

        for gameId in get_gameIds:
            gamepk = gameId['game_pk']
            gamepks.append(gamepk)

Использование набора

import csv
import requests
import datetime
from pprint import pprint
import pendulum

start = pendulum.datetime(2016, 4, 3)
end = pendulum.datetime(2016, 10, 2)
period = pendulum.period(start, end)

gamepks = set()
for dt in period.range('days'):
    day = dt.format('DD')
    month = dt.format('MM')
    year = dt.format('YYYY')
    the_date = str(month) + "/" + str(day) + "/" + str(year)

    try:
        req = requests.get('http://gd.mlb.com/components/game/mlb/year_' + str(year) + '/month_' + str(month) + '/day_' + str(day) + '/miniscoreboard.json') # 
        get_gameIds = req.json()['data']['games']['game']

        for gameId in get_gameIds:
            gamepk = gameId['game_pk']
            gamepks.add(gamepk)

Важно понимать сферу действия.Переменные, объявленные внутри внутренних областей (например, внутри циклов for), «исчезают» после выхода из цикла.Это может помочь вам определить, где вы должны инициализировать переменные (в данном случае список / набор), которые вы хотите сохранить после окончания цикла.

...