在字典中循环

时间:2016-04-15 21:53:56

标签: python loops python-3.x dictionary

我坚持编码的最后一部分,需要帮助。

这是我的任务

我需要帮助的部分是关于比较年龄和返回最低值的for / if语句。我知道我希望循环使用所有年龄段,并且仅在使用>时返回最低值。比或者<不是标志,但不知道如何在编码中说出来。

4 个答案:

答案 0 :(得分: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 :(得分:0)

使用min()函数的key参数告诉它在比较元素时应该使用什么。

答案 2 :(得分: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)

答案 3 :(得分:-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()