核心在于,字典主要有三个可迭代的视图对象:

keys():获取所有的键。values():获取所有的值。items():获取所有的键值对,每个键值对是一个元组(key, value)。
下面我将详细介绍各种转换场景和对应的代码。
只获取字典的键,转换为列表
这是最直接的需求,使用 list() 构造函数可以直接将字典的键视图转换为列表。
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
# 方法 1:直接对 dict 进行迭代(最常用、最简洁)
# 在 Python 中,直接迭代字典默认是迭代它的键
keys_list = list(my_dict)
print(f"直接迭代得到的键列表: {keys_list}")
# 方法 2:显式使用 .keys()
keys_list_explicit = list(my_dict.keys())
print(f"使用 .keys() 得到的键列表: {keys_list_explicit}")
# 输出:
# 直接迭代得到的键列表: ['name', 'age', 'city']
# 使用 .keys() 得到的键列表: ['name', 'age', 'city']
只获取字典的值,转换为列表
如果你只需要字典中的值,可以使用 values() 方法。
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
values_list = list(my_dict.values())
print(f"值列表: {values_list}")
# 输出:
# 值列表: ['Alice', 25, 'New York']
获取字典的键值对,转换为列表
这是最常用的转换方式之一,通常用于需要同时处理键和值的场景,使用 items() 方法,它会返回一个包含 (key, value) 元组的列表。

my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
items_list = list(my_dict.items())
print(f"键值对列表: {items_list}")
# 输出:
# 键值对列表: [('name', 'Alice'), ('age', 25), ('city', 'New York')]
这个列表非常适合用于 for 循环来同时遍历键和值:
for key, value in my_dict.items():
print(f"键: {key}, 值: {value}")
根据字典的值来排序,并返回排序后的键列表
这是一个非常实用的场景,你有一个学生成绩字典,想按分数从高到低排出学生名次。
scores = {'Alice': 88, 'Bob': 95, 'Charlie': 76, 'David': 88}
# 1. 使用 sorted() 函数和 key 参数
# lambda item: item[1] 表示使用字典的值(即元组的第二个元素)作为排序依据
# reverse=True 表示降序排序
sorted_keys_by_value = sorted(scores, key=lambda item: item[1], reverse=True)
print(f"按值降序排序后的键列表: {sorted_keys_by_value}")
# 输出:
# 按值降序排序后的键列表: ['Bob', 'Alice', 'David', 'Charlie']
处理并列情况(稳定排序):
上面的例子中,Alice 和 David 都是 88 分。sorted() 函数是稳定排序,意味着如果两个元素的排序键(这里是分数)相同,它们在原始字典中的相对顺序会被保留,在 Python 3.7+ 中,字典会保持插入顺序,Alice 会排在 David 前面。
将字典的键或值转换为特定类型的列表
如果字典中的值不是你想要的类型(数字被存储为字符串),你可以在转换时进行类型转换。

str_scores = {'Alice': '88', 'Bob': '95', 'Charlie': '76'}
# 将字符串类型的值转换为整数列表
int_values_list = [int(value) for value in str_scores.values()]
print(f"转换为整数的值列表: {int_values_list}")
# 输出:
# 转换为整数的值列表: [88, 95, 76]
这里使用了列表推导式,它是一种非常 Pythonic 且高效的方式来创建列表。
将字典的键值对转换为两个独立的列表(并行列表)
有时你需要两个列表,一个包含所有键,另一个包含所有对应的值。
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
keys = list(my_dict.keys())
values = list(my_dict.values())
print(f"键列表: {keys}")
print(f"值列表: {values}")
# 输出:
# 键列表: ['name', 'age', 'city']
# 值列表: ['Alice', 25, 'New York']
注意: 这种方法在字典顺序发生变化时(Python 3.7+ 之前的版本),两个列表的对应关系可能会错乱,但在现代 Python 中,由于字典是有序的,所以是安全的。
总结与推荐
| 你的目标 | 推荐方法 | 示例 |
|---|---|---|
| 获取所有键 | list(my_dict) 或 list(my_dict.keys()) |
list({'a': 1, 'b': 2}) -> ['a', 'b'] |
| 获取所有值 | list(my_dict.values()) |
list({'a': 1, 'b': 2}.values()) -> [1, 2] |
| 获取所有键值对 | list(my_dict.items()) |
list({'a': 1, 'b': 2}.items()) -> [('a', 1), ('b', 2)] |
| 按值排序键 | sorted(my_dict, key=my_dict.get, reverse=True) |
sorted({'a': 2, 'b': 1}, key=my_dict.get) -> ['a', 'b'] |
| 值类型转换 | 列表推导式 | [int(v) for v in my_dict.values()] |
| 转换为两个并行列表 | 分别获取 keys() 和 values() |
keys = list(my_dict.keys())values = list(my_dict.values()) |
希望这个详细的总结能帮助你完全理解如何在 Python 中进行字典到列表的转换!
