Я хочу отсортировать целые числа в ключах словаря - PullRequest
0 голосов
/ 26 октября 2018

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

Функция принимает -txt.file в качестве аргумента, а содержимое файла следует этой структуре - "name", "time", "status" ("status" - это CONFIRMED или CANCELLED). Предполагается только отобразить CONFIRMED бронирования и отсортировать их по "time". До сих пор мне удавалось отображать резервирования, но я просто не знаю, как их отсортировать.

def show_reservations(filename):
    with open(filename) as file:
        content = file.readlines()

    for reservation in content:
        dictionary = {}
        if ", CONFIRMED" in reservation:
            dictionary.setdefault(reservation[:-12], "CONFIRMED")
            empty_list = []
            for k, v in dictionary.items():
                print(k)


print(show_reservations(blabla.txt))

Произвольное содержимое -txt.file:

MARTIN, 19, CONFIRMED
JULIE, 18, CONFIRMED
METTE, 17, CANCELLED

Желаемый вывод:

JULIE, 18
MARTIN, 19

1 Ответ

0 голосов
/ 27 октября 2018

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

sorted () позволяет сортировать список резервирований.Затем вы можете выбрать коэффициент сортировки, указав его с помощью лямбды.:)

def show_reservations(filename):
    with open(filename) as file:
        content = file.readlines()

    # list to store confirmed reservations
    confirmed_list = []

    for reservation in content:
        # dict to be re-used to parse each reservation
        r = {}
        if ", CONFIRMED" in reservation:
            # splits each line to a list          e.g. ["JULIE", "16", "CONFIRMED"]
            reserv = reservation.split(",")
            # gets first element which is the name of customer and stores in dict
            # strip is to remove any leading/trailing whitespace
            r['name'] = reserv[0].strip()
            # gets second element which is the time of reservation and stores in dict
            r['time'] = reserv[1].strip()
            # appends dict to list
            confirmed_list.append(r)

    # sorts the list of confirmed reservations by time using lambda
    confirmed_list_s = sorted(confirmed_list, key=lambda k: k['time'])

    for r in confirmed_list_s:
        # prints out each reservation in sorted list
        row = ", ".join(val for key, val in r.items())
        print(row)

show_reservations("blabla.txt")

Вывод:

JO, 16
JULIE, 18
MARTIN, 19
CHARLIE, 20
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...