如何使用 itemgetter()
?
itemgetter()
是 Python operator
模块中的一个函数,主要用于从 字典、列表、元组等数据结构中取值。它的作用类似一个自动化的 “取值器”,可以让你更方便地提取数据。
1. itemgetter()
取字典 key 的值
如果你有一堆字典,比如一个学生信息列表,你想按 “age” 排序:
from operator import itemgetter
students = [
{"name": "Tom", "age": 25},
{"name": "Alice", "age": 22},
{"name": "Jerry", "age": 30}
]
# 使用 itemgetter() 按 age 排序
sorted_students = sorted(students, key=itemgetter("age"))
print(sorted_students)
输出:
[
{'name': 'Alice', 'age': 22},
{'name': 'Tom', 'age': 25},
{'name': 'Jerry', 'age': 30}
]
📌 等效于 lambda x: x["age"]
,但 itemgetter("age")
更简洁、高效!
2. itemgetter()
取列表/元组的索引值
如果你有一个 列表,其中每个元素是一个元组(比如 (序号, 名字, 分数)
),你想按 分数排序:
from operator import itemgetter
students = [
(1, "Tom", 88),
(2, "Alice", 95),
(3, "Jerry", 90)
]
# 按索引 2(分数)排序
sorted_students = sorted(students, key=itemgetter(2))
print(sorted_students)
输出:
[
(1, 'Tom', 88),
(3, 'Jerry', 90),
(2, 'Alice', 95)
]
📌 itemgetter(2)
取每个元组 索引 2 的值,等效于 lambda x: x[2]
,但 itemgetter()
更快!
3. itemgetter()
一次取多个值
你可以让 itemgetter()
同时获取多个 key 或索引,比如按 年龄排序,年龄相同时按名字排序:
from operator import itemgetter
students = [
{"name": "Tom", "age": 25},
{"name": "Alice", "age": 25},
{"name": "Jerry", "age": 30}
]
# 先按 age 排序,再按 name 排序
sorted_students = sorted(students, key=itemgetter("age", "name"))
print(sorted_students)
输出:
[
{'name': 'Alice', 'age': 25},
{'name': 'Tom', 'age': 25},
{'name': 'Jerry', 'age': 30}
]
📌 itemgetter("age", "name")
相当于 lambda x: (x["age"], x["name"])
,但更清晰!
4. itemgetter()
用在 map()
里
你可以用 itemgetter()
从一堆数据里 批量取值,比如你有一堆字典,只想拿 “name” 字段:
from operator import itemgetter
students = [
{"name": "Tom", "age": 25},
{"name": "Alice", "age": 22},
{"name": "Jerry", "age": 30}
]
# 取出所有学生的名字
names = list(map(itemgetter("name"), students))
print(names)
输出:
["Tom", "Alice", "Jerry"]
📌 map(itemgetter("name"), students)
直接提取所有 name
,比 map(lambda x: x["name"], students)
更简洁!
总结
✅ itemgetter()
的作用:
itemgetter("key")
👉 取字典某个 key 的值itemgetter(索引)
👉 取列表/元组的某个索引值itemgetter(a, b)
👉 一次取多个值,可用于多级排序- 比
lambda
更简洁、更快,代码更清晰!
一句话记住:
💡 “告诉 itemgetter()
你要取哪里,它就帮你自动取值!” 🚀