2016-04-15 4 views
-3

Я застрял в последней части этого кодирования и нуждаюсь в помощи.цикл в словаре

Вот моя задача

Часть мне нужна помощь является для /, если заявления о сравнении только возраст и возвращая наименьшее значение. Я знаю, что хочу перебирать все возрасты и только возвращать наименьшее значение, используя if> than или <, чем знаки, но не знаю, как записать это в кодировке.

+2

что вы пробовали? даже если он не работает должным образом, вы должны добавить его на свой вопрос – xgord

+0

, отредактированный в комментариях, что я до сих пор – Jessica

ответ

0

Используйте аргумент key функции min(), чтобы сообщить ему, что он должен использовать при сравнении элементов.

0

Переберите ключей и значений словаря, вы используете .items()

for president, data in p_db.items(): 
    ... 

Вы можете даже автоматически разворачивать значение кортежа, как это:

for president, (year, term, age, state, party) in p_db.items(): 
    ... 

Вам нужно хранить только два значения , минимальный возраст и список всех президентов с одинаковым минимальным возрастом. Вы можете сделать это с помощью одной итерации через p_db

def func(p_db): 
    min_age = None 
    presidents = [] 

    for president, (year, term, age, state, party) in p_db.items(): 
     if min_age is None or age < min_age: 
      min_age = age 
      presidents = [president] 
     elif age == min_age: 
      presidents.append(president) 

    presidents.sort() 
    return (min_age, presidents) 
+0

Просто сделайте 'президенты.sort()' перед оператором return. –

+0

@ Джессика Я обновил ответ –

+0

Не могли бы вы рассказать мне, что переключается, когда вы хотите максимальный возраст? – Jessica

1

что-то вроде этого, кажется, сделать трюк.

def youngest_at_inauguration(db): 
    youngest = min((db[p][2] for p in db)) 
    return youngest, [key for key in db if db[key][2] == youngest] 

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

-1
def youngestprez(): 
    sample_p_db = { 
    "Ronald Reagan": (1981, 8, 69,"California","Republican"), 
    "George Bush": (1989, 4, 64,"Texas","Republican"), 
    "Bill Clinton": (1993, 8, 46,"Arkansas","Democrat") } 
    min_age = 100 
    for prez in sample_p_db: 
     if min_age > sample_p_db[prez][2]: 
      min_age = sample_p_db[prez][2] 
      prez_name = prez 

    return(prez_name, min_age) 


youngestprez() 
Смежные вопросы