如何在Python字典列表中选取指定字段最小值对应的元素?
选取字典列表中Age最小的完整元素
嘿,这个需求其实很好解决,Python里有几个简洁的方法能帮你实现,我给你拆解一下:
方法一:用min()函数直接获取单个最小元素
这是最直接高效的方式,min()函数可以接受一个key参数,用来指定比较的依据——这里就是每个字典的Age字段。代码如下:
myListOfPeople = [{'ID': 0, 'Name': 'Mary', 'Age': 25}, {'ID': 1, 'Name': 'John', 'Age': 28}] younger_person = min(myListOfPeople, key=lambda person: person['Age']) print(younger_person)
运行后输出就是你想要的结果:
{'ID': 0, 'Name': 'Mary', 'Age': 25}
这里的lambda person: person['Age']是一个匿名函数,作用是从每个字典里提取Age的值,让min()根据这个值来找出最小的那个完整字典元素。
方法二:获取所有年龄最小的元素(处理多个相同最小值的情况)
如果你的列表里有多个元素的Age都是最小值(比如再加一个{'ID':2, 'Name':'Lisa', 'Age':25}),上面的方法只会返回第一个遇到的元素。要是想把所有符合条件的元素都选出来,可以先算出最小年龄,再用列表推导式筛选:
myListOfPeople = [ {'ID': 0, 'Name': 'Mary', 'Age': 25}, {'ID': 1, 'Name': 'John', 'Age': 28}, {'ID': 2, 'Name': 'Lisa', 'Age': 25} ] # 先算出最小年龄 min_age = min(person['Age'] for person in myListOfPeople) # 筛选所有Age等于最小年龄的元素 younger_people = [person for person in myListOfPeople if person['Age'] == min_age] print(younger_people)
输出结果会是:
[{'ID': 0, 'Name': 'Mary', 'Age': 25}, {'ID': 2, 'Name': 'Lisa', 'Age': 25}]
关于你原来的思路补充
你一开始想直接在列表推导式里判断,但如果写成[person for person in myListOfPeople if person['Age'] == min(x['Age'] for x in myListOfPeople)]虽然也能行,但每次循环都会重新计算一次最小年龄,效率会低一些。所以先把最小年龄存到变量里再筛选,是更优的写法~
内容的提问来源于stack exchange,提问作者Guilherme Campos
相关产品推荐
相关产品推荐

