
本文介绍如何利用 Python 列表推导式,高效地从嵌套字典结构中提取球员姓名及其对应国籍,并生成包含 (姓名, 国籍) 元组的列表,无需使用 zip()。
本文介绍如何利用 python 列表推导式,高效地从嵌套字典结构中提取球员姓名及其对应国籍,并生成包含 `(姓名, 国籍)` 元组的列表,无需使用 `zip()`。
在处理嵌套字典(如球员信息数据库)时,常需从中抽取特定字段组合成结构化数据。本例中,players 字典以球员姓名为键,其值为包含 'nationality' 等属性的子字典。目标是构建形如 [('L. Messi', 'Argentina'), ('Cristiano Ronaldo', 'Portugal'), ...] 的元组列表。
最简洁、Pythonic 的方式是使用列表推导式,直接遍历字典的 .items(),解包每对 (key, value),再从中提取所需字段:
players = {
'L. Messi': {'age': 31, 'nationality': 'Argentina', 'teams': ['Barcelona']},
'Cristiano Ronaldo': {'age': 33, 'nationality': 'Portugal', 'teams': ['Juventus', 'Real Madrid', 'Manchester United']},
'Neymar Jr': {'age': 26, 'nationality': 'Brazil', 'teams': ['Santos', 'Barcelona', 'Paris Saint-German']},
'De Gea': {'age': 27, 'nationality': 'Spain', 'teams': ['Atletico Madrid', 'Manchester United']},
'K. De Bruyne': {'age': 27, 'nationality': 'Belgium', 'teams': ['Chelsea', 'Manchester City']}
}
player_nationalities = [(name, info['nationality']) for name, info in players.items()]
print(player_nationalities)运行结果:
[('L. Messi', 'Argentina'),
('Cristiano Ronaldo', 'Portugal'),
('Neymar Jr', 'Brazil'),
('De Gea', 'Spain'),
('K. De Bruyne', 'Belgium')]⚠️ 注意事项:
- 若某些球员条目中可能缺失
'nationality'键,建议添加安全访问逻辑,例如使用info.get('nationality', 'Unknown')避免KeyError; -
zip()在此场景不适用——它适用于“并行合并多个等长序列”,而本例是单字典的键值映射提取,直接迭代.items()更自然、高效; - 列表推导式兼具可读性与性能,是 Python 中处理此类映射转换的首选方案。
总结:面对结构清晰的嵌套字典,优先考虑用 for name, info in dict.items() 解包 + 列表推导式构造新结构,既简洁又健壮。

















