You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python字典列表操作:筛选值最多字典与前3高分字典

Hey,这两个都是Python中处理字典列表的常见场景,我来给你拆解解决方案:

1. 找出键值对数量最多的字典

要搞定这个,核心就是利用字典的len()函数(它直接返回字典的键值对总数),搭配max()函数就能快速定位到目标字典。

举个例子:

dict_list = [{'a': 1}, {'b': 2, 'c': 3}, {'d': 4, 'e': 5, 'f': 6}]
# 用lambda表达式把每个字典映射成它的长度,作为max的判断依据
max_kv_dict = max(dict_list, key=lambda x: len(x))
print(max_kv_dict)  # 输出: {'d': 4, 'e': 5, 'f': 6}

如果列表里有多个字典的键值对数量相同且都是最大值,max()只会返回列表中第一个符合条件的。要是你想把所有长度最大的字典都找出来,可以这么写:

max_length = max(len(d) for d in dict_list)
all_max_dicts = [d for d in dict_list if len(d) == max_length]
print(all_max_dicts)

2. 筛选分数最高的前三个字典(提取名字)

针对你给出的学生列表,我们需要先按分数从高到低排序,再取前三个元素,最后提取它们的名字就能得到预期结果。

先看基础实现:

student_list = [{'name': 'A', 'score': 12}, {'name': 'B', 'score': 20}, {'name': 'C', 'score': 11}, {'name': 'D', 'score': 20}, {'name': 'E', 'score': 9}]

# 按分数降序排序,sorted是稳定排序——同分数的元素会保持原列表里的相对顺序
sorted_students = sorted(student_list, key=lambda x: x['score'], reverse=True)

# 截取前3个,再提取名字
top_three_names = [stu['name'] for stu in sorted_students[:3]]
print(top_three_names)  # 输出: ['B', 'D', 'A']

不过你预期的结果是[D, B, A],这说明你希望分数相同的情况下,名字按字典序降序排列(D的字典序比B大)。那我们可以调整排序的key为元组,先按分数降序,再按名字降序:

sorted_students = sorted(student_list, key=lambda x: (-x['score'], x['name']), reverse=True)
top_three_names = [stu['name'] for stu in sorted_students[:3]]
print(top_three_names)  # 输出: ['D', 'B', 'A']

这样就完全符合你的预期啦~

内容的提问来源于stack exchange,提问作者PaCi

火山引擎 最新活动