Как напечатать значение словаря, основанное на предыдущем значении ключа?(где ключом является дата) - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть большое количество спортивных данных, которые я анализирую.Я пытаюсь найти последнее местоположение команды (часовой пояс).

Я решил, что создание словаря является жизнеспособным вариантом.

Это то, что я получил до сих пор, которое выводит игровые данные и часовой пояс.

                schedule_ANA=dict()
                #ANA is the team I'm interested in
                if str(hometeam) == "ANA" or str(awayteam) == "ANA":
                    schedule_ANA[date]=str(timezone)
                    # This finds the time zone of the game on that date
                    print (schedule_ANA)

Это вывод

 {'2018/09/08': 'GMT-5'}
 {'2018/09/09': 'GMT-5'}
 {'2018/08/03': 'GMT-4'}
 {'2018/08/04': 'GMT-4'}
 {'2018/08/05': 'GMT-4'}
 {'2018/05/08': 'GMT-6'}
 {'2018/05/09': 'GMT-6'}
 {'2018/05/28': 'GMT-4'}
 {'2018/05/29': 'GMT-4'}
 {'2018/05/30': 'GMT-4'}
 {'2018/05/31': 'GMT-4'}
 {'2018/04/23': 'GMT-5'}
 {'2018/04/24': 'GMT-5'}
 {'2018/08/28': 'GMT-7'}
 {'2018/04/25': 'GMT-5'}
 {'2018/09/01': 'GMT-5'}

Теперь мне нужно рассмотретьПРЕДЫДУЩИЙ часовой пояс с этой даты.

Я хочу найти часовой пояс последней игры.Я хочу вернуться назад на 1 день, пока не появится дата / часовой пояс следующей игры.

Например, если игра состоится 28 августа 2018 года по Гринвичу-7, игра не состоится 29, 30 или 31Август, затем еще одна игра в 1 сентября 2018 года в GMT -5, я хочу, чтобы функция возвращала GMT -7, когда вводится 1 сентября 2018 года.

Я хочу использовать оператор if, чтобы сказать

  if date == 2018/09/01
  previous_date=date-1
  previous_timezone= schedule_ANA[previous_date]

Я не уверен в следующих вещах 1. Если это правильный синтаксис для словаря 2. Как преобразовать дату в формат, чтобы это работало (вернитесь на 1 день к предыдущему месяцу)

Заранее спасибо!

-

-

РЕДАКТИРОВАТЬ Спасибо всем, кто прокомментировал.Я пытаюсь реализовать некоторые решения в ответах.Это мой обновленный код, но я все еще получаю ошибку

                schedule_ANA=dict()
                #ANA is the team I'm interested in
                if str(hometeam) == "ANA" or str(awayteam) == "ANA":
                    schedule_ANA[date]=str(timezone)
                    # This finds the time zone of the game on that date
                    print (schedule_ANA)

                    from datetime import datetime
                    from ast import literal_eval
                    schedule_ANA = [literal_eval(i) for i in schedule_ANA]
                    sorted_dates = sorted([(k,v)for i in schedule_ANA for k,v in i.items()], key=lambda x: datetime.strptime(x[0], "%Y/%m/%d"))

Ошибка

Traceback (most recent call last):
  File "H:/2019sem2/egh400/Code/rev40.py", line 147, in <module>
    schedule_ANA = [literal_eval(i) for i in schedule_ANA]
  File "H:/2019sem2/egh400/Code/rev40.py", line 147, in <listcomp>
    schedule_ANA = [literal_eval(i) for i in schedule_ANA]
  File "C:\Program Files\IBM\SPSS 25\Python3\lib\ast.py", line 46, in     literal_eval
    node_or_string = parse(node_or_string, mode='eval')
  File "C:\Program Files\IBM\SPSS 25\Python3\lib\ast.py", line 35, in parse
    return compile(source, filename, mode, PyCF_ONLY_AST)
  File "<unknown>", line 1
    2018/04/03
          ^
SyntaxError: invalid token

Ответы [ 2 ]

0 голосов
/ 20 сентября 2019

Я преобразовал ваш словарь в список кортежей и отсортирован по датам.

>>> from datetime import datetime

>>> dates_list
[{'2018/09/08': 'GMT-5'}, {'2018/09/09': 'GMT-5'}, {'2018/08/03': 'GMT-4'}, {'2018/08/04': 'GMT-4'}, {'2018/08/05': 'GMT-4'}, {'2018/05/08': 'GMT-6'}, {'2018/05/09': 'GMT-6'}, {'2018/05/28': 'GMT-4'}, {'2018/05/29': 'GMT-4'}, {'2018/05/30': 'GMT-4'}, {'2018/05/31': 'GMT-4'}, {'2018/04/23': 'GMT-5'}, {'2018/04/24': 'GMT-5'}, {'2018/08/28': 'GMT-7'}, {'2018/04/25': 'GMT-5'}, {'2018/09/01': 'GMT-5'}]

# if elements are in string, to convert them to actual data type, here dictionary,
# follow below steps
# >>> from ast import literal_eval
# >>> dates_list = [literal_eval(i) for i in dates_list]

>>> sorted_dates = sorted([(k,v)for i in dates_list for k,v in i.items()], key=lambda x: datetime.strptime(x[0], "%Y/%m/%d"))
[('2018/04/23', 'GMT-5'), ('2018/04/24', 'GMT-5'), ('2018/04/25', 'GMT-5'), ('2018/05/08', 'GMT-6'), ('2018/05/09', 'GMT-6'), ('2018/05/28', 'GMT-4'), ('2018/05/29', 'GMT-4'), ('2018/05/30', 'GMT-4'), ('2018/05/31', 'GMT-4'), ('2018/08/03', 'GMT-4'), ('2018/08/04', 'GMT-4'), ('2018/08/05', 'GMT-4'), ('2018/08/28', 'GMT-7'), ('2018/09/01', 'GMT-5'), ('2018/09/08', 'GMT-5'), ('2018/09/09', 'GMT-5')]

Теперь вы можете проверять предыдущие даты, используя значения индекса.

0 голосов
/ 20 сентября 2019

Как заметил @shaik moeed.используйте список.

def get_last_date(date_str):
    return [x for x in schedule_ANA.keys()].index(date_str) - 1 

Приведенный выше код выдаст значение Error, если date_str отсутствует в файле schedule_ANA.

def get_last_date(date_str):
    return next((x for x in schedule_ANA.keys()), [-1]) - 1

Приведенный выше код имеет значение по умолчанию -1, если date_strне в диктанте.

...