我正在翻阅一本字典,其中以总统的名字作为我字典的关键字,以及一个元组,其中包含年份开始,服务年限,学期开始时的年龄以及他们来自哪个州。在这种情况下,我只是看看他们为此开始任期的年龄。 dictonary的样本:
pres_data={"Reagan": (1981, 8, 69,"California"), "Bush":(1989, 4,64,"Texas")}
字典经历了更多像上面这样的总统和数据,但是我没有把它包括在内,因为要放在这里太多了。
我正在寻找的输出是:
(64,["George Bush"])
所以它会首先显示最小年龄(我假设它将使用min()函数来获得它,但它尚未在我的设置中工作)然后是一个总统列表与该词典共享最年轻年龄的名称。
到目前为止我的代码:
pres_data={"Reagan": (1981, 8, 69,"California"), "Bush":(1989,4,64,"Texas")}
for key, value in pres_data.items():
age_start_term=value[2]
print(age_start_term,key)
我想在我的age_start_term变量之后放置像youngest = min(age_start_term)这样的东西,但这只会检查那一次迭代。所以我想我都希望得到最小的比较,然后打印一个列表,其中包含与词典中表示的最年轻年龄一致的键。 为什么我可以添加到我所拥有的内容中,以便在迭代后将其与所有年龄段进行比较?为了获得与字典中最年轻的年龄相对应的键,我可以沿着这些方向做点什么吗?
allyoungest= [k for k in pres_data if pres_data[k] == #variable representing youngest]
答案 0 :(得分:6)
min
函数使用一个名为key
的参数,您可以使用该参数从您尝试比较的项目中提取比较键。在你的情况下,像:
youngest = min(pres_data.items(), key=lambda item: item[1][2])
这会给你:
('Bush', (1989, 4, 64, 'Texas'))
你应该能够变成你想要的任何输出格式。
如果你想要一份具有相同最低年龄的所有总统的名单,你可以像你猜测的那样再做一次传递:
min_age = youngest[1][2]
all_youngest = [name for name in pres_data if pres_data[name][2] == min_age]
答案 1 :(得分:2)
实现它的功能性方法:
from functools import reduce
pres_data = {"Reagan": (1981, 8, 69,"California"), "Bush":(1989,4,64,"Texas")}
def min_pres(acc, it):
min_age, presidents = acc
name, (year, served, age, state) = it
if min_age is None or age < min_age:
return (age, [name])
elif age == min_age:
presidents.append(name)
return acc
reduce(min_pres, pres_data.items(), (None, None))
答案 2 :(得分:0)
诱惑是使用min,但这需要至少迭代一次列表,然后你还需要在术语开始时建立一些年龄指数。一个更好的选择是在总统的初始阶段建立一个年龄字典,并在你建立时跟踪最小年龄。然后,您只需要引用与该索引匹配的条目。
import collections
pres_data = {
"Reagan": (1981, 8, 69,"California"),
"Bush": (1989,4,64,"Texas"),
"LizardKing": (2569,4,64,"Nrzilplack")
}
bday_dict = collections.defaultdict(list)
min_age = 1000
for key, value in pres_data.items():
age_start_term = value[2]
if age_start_term < min_age:
min_age = age_start_term
bday_dict[age_start_term].append(key)
print(min_age, bday_dict[min_age])
# 64 ['LizardKing', 'Bush']
答案 3 :(得分:0)
这个怎么样?
sorted(pres_data.items(), key= lambda x: x[1][2])[0]