как определить, какой ключ имеет наибольшее значение в словаре - PullRequest
0 голосов
/ 26 июня 2018

У меня есть целая программа, в которой есть предыдущий словарь в другой функции, который дает мне список городов вылета и прилета самолетов.

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

def исходящий (рейсы): длина = 0 для i in (рейсы): if (len (рейсы [i])> длина): длина = (len (рейсы [i])) перерыв еще: продолжить

for i in flights:
    if (len(flights[i]) == length):
        pop = (len(flights[i]))

print ("the most outgoing flight is: " , [i])

этот код должен работать, но по какой-то причине он не дает мне правильный максимальный вывод из файла.Есть идеи, почему?

Ответы [ 2 ]

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

Вы не очень понимали структуру flights, поэтому я предполагаю, что ключи - это строки, а значения - списки строк.

Один из способов сделать этобыть для создания списка кортежей, где каждый элемент равен (departure_city, len(flights[departure_city])).Затем вы можете отсортировать список по количеству поступивших.

def outgoing(flights):
    # Create a list of tuples
    flight_tups = [(departure_city, len(flights[departure_city])) for departure_city in flights]

    # Sort the list by number of arrivals
    #   We do this by passing a lambda to `sort`,
    #   telling it to sort by the second value in
    #   each tuple, i.e. arrivals
    flight_tups.sort(key=lambda tup: tup[1])

    # We can now get the city with the most arrivals by
    #   taking the first element of flight_tups
    most = flight_tups[0]
    print(f'City: {most[0]}\nNumber of Arrivals: {most[1]}')

Примечание: вы также можете использовать max, но из вашего вопроса показалось, что вы хотели citie s сбольшинство прибытий, а не только один город с наибольшим количеством.Использование sort также позволит вам определить, есть ли связь.

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

Самое простое решение - просто использовать встроенную функцию max и понимание списка:

def outgoing(flights):
    print(max([len(i) for i in flights]))

Если вы хотите придерживаться своего кода, вам нужно сравнивать с max каждую итерацию:

def outgoing(flights): 
    max_outgoing = 0 
    for i in flights:  
        if(max_outgoing < len(flights[i])):
            print(max_outgoing)
            max_outgoing = len(flights[i])

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

def outgoing(flights): 
    max_outgoing = 0 
    max_key = None
    for i in flights:  
        if(max_outgoing < len(flights[i])):
            print(max_outgoing)
            max_outgoing = len(flights[i])
            max_key = i

или в более короткой версии:

def outgoing(flights):
    out_dict = {i: len(i) for i in flights}
    max_out = max(out_dict, key=out_dict.get)
    print(max_out)
    print(flights[max_out])
...