Python3 字典 values() 方法

Python3 字典 Python3 字典


描述

Python 字典的 values() 方法用于获取字典中的所有值,返回一个 dict_values 视图对象。

视图对象不是列表,而是一个与原字典保持关联的动态视图。当字典中的值发生变化,或者添加、删除键值对时,视图会反映这些变化。

例如:

dict_values(['Runoob', 7])

values() 返回的视图具有以下特点:

  • 支持遍历:可以使用 for 循环访问字典中的所有值。
  • 动态更新:原字典发生变化时,视图会反映最新内容。
  • 允许重复:不同的键可以对应相同的值。
  • 不支持索引:不能直接使用 dict.values()[0] 获取第一个值。
  • 保留顺序:Python 3.7 及以上版本按照字典键的插入顺序遍历对应的值。

与 dict.keys() 和 dict.items() 一样,values() 返回的是字典视图对象。

如果需要将视图转换为列表,可以使用 list() 函数。

语法

values() 方法语法如下:

dict.values()

参数

无。

返回值

返回一个 dict_values 视图对象,包含字典中的所有值。

该方法不会修改原字典,也不会直接创建一份独立的值列表。

实例

以下实例展示了 values() 方法的基本使用。

实例

#!/usr/bin/python3

tinydict = {
    'Name': 'Runoob',
    'Age': 7
}

values = tinydict.values()

print(values)
print(type(values))

执行结果:

dict_values(['Runoob', 7])
<class 'dict_values'>

可以看到,values() 返回的是 dict_values 对象,而不是普通列表。

实例 2:遍历字典中的值

可以通过 for 循环遍历 values() 返回的视图。

实例

dishes = {
    'eggs': 2,
    'sausage': 1,
    'bacon': 1,
    'spam': 500
}

for value in dishes.values():
    print(value)

执行结果:

2
1
1
500

由于 Python 3.7 及以上版本保证字典保留插入顺序,因此遍历的值与键的插入顺序相对应。

实例 3:计算字典中所有值的总和

如果字典中的值都是数字,可以使用 sum() 函数计算总和。

实例

dishes = {
    'eggs': 2,
    'sausage': 1,
    'bacon': 1,
    'spam': 500
}

total = sum(dishes.values())

print("总数:", total)

执行结果:

总数: 504

使用 sum(dishes.values()) 可以直接对字典中的数值求和,不需要手动编写循环。

注意:如果字典中的值包含字符串等不支持相加的类型,直接使用 sum() 可能引发 TypeError。

实例 4:将 values() 转换为列表

由于 dict_values 对象不支持索引,因此不能直接使用下标访问其中的元素。

如果需要按照位置访问,可以先转换为列表。

实例

tinydict = {
    'Name': 'Runoob',
    'Age': 7,
    'Site': 'www.runoob.com'
}

values_list = list(tinydict.values())

print(values_list)
print(values_list[0])
print(values_list[1])

执行结果:

['Runoob', 7, 'www.runoob.com']
Runoob
7

需要注意,list() 创建的是一个新的列表。字典后续新增、删除键值对或重新赋值,不会自动改变这个列表中的对应元素。

不过,该转换属于浅拷贝:如果值本身是列表等可变对象,列表副本与字典仍可能引用同一个内部对象。

实例 5:视图对象的动态更新

values() 返回的视图与原字典保持关联,因此当字典发生变化时,不需要重新调用 values()。

实例

dishes = {
    'eggs': 2,
    'sausage': 1,
    'bacon': 1,
    'spam': 500
}

# 获取视图对象
values = dishes.values()

print(list(values))

# 修改字典中的值
dishes['eggs'] = 5

print(list(values))

# 删除字典中的元素
del dishes['sausage']
del dishes['eggs']

print(list(values))

执行结果:

[2, 1, 1, 500]
[5, 1, 1, 500]
[1, 500]

可以看到,values 始终引用原字典的动态视图。

原字典更新后,再次使用 list(values) 即可获取当时的值。

实例 6:判断某个值是否存在

values() 支持使用 in 运算符判断指定值是否存在于字典中。

实例

student = {
    'name': 'Runoob',
    'age': 7,
    'city': 'Beijing'
}

print('Runoob' in student.values())
print('Shanghai' in student.values())
print(7 in student.values())

执行结果:

True
False
True

需要注意,字典通常可以高效判断某个键是否存在,但通过 values() 查找值通常需要逐个比较,时间复杂度一般为 O(n)。

实例 7:字典的值允许重复

字典中的键必须唯一,但不同的键可以对应相同的值。

因此,values() 返回的视图也可能包含重复元素。

实例

scores = {
    'Tom': 90,
    'Jack': 85,
    'Lucy': 90,
    'Mike': 85
}

print(list(scores.values()))

# 对值进行去重
unique_scores = set(scores.values())

print(sorted(unique_scores))

执行结果:

[90, 85, 90, 85]
[85, 90]

如果需要对字典中的值进行去重,可以使用 set(),但前提是这些值必须可哈希。

实例 8:两个 values() 视图的比较

与普通列表不同,dict_values 视图不按照元素内容进行相等性比较。

即使两个视图来自同一个字典,比较结果仍然可能为 False。

实例

d = {'a': 1}

print(d.values() == d.values())

values = d.values()

print(values == values)

# 转换为列表后比较内容
print(list(d.values()) == list(d.values()))

执行结果:

False
True
True

这里需要特别区分:

  • d.values() == d.values():每次调用都会创建新的视图对象,结果为 False。
  • values == values:同一个视图对象与自身比较,结果为 True。
  • list(d.values()) == list(d.values()):比较的是列表中的元素内容,结果为 True。

如果需要比较两个字典是否具有相同的键值对,通常应该直接比较字典,而不是比较 values() 视图。

values()、keys() 和 items() 的区别

Python 字典提供了三个常用的视图方法:

方法 返回内容 示例
keys() 字典中的所有键 dict_keys(['a', 'b'])
values() 字典中的所有值 dict_values([1, 2])
items() 字典中的所有键值对 dict_items([('a', 1), ('b', 2)])

例如:

实例

d = {'a': 1, 'b': 2}

print(d.keys())
print(d.values())
print(d.items())

执行结果:

dict_keys(['a', 'b'])
dict_values([1, 2])
dict_items([('a', 1), ('b', 2)])

这三个方法返回的视图都会反映原字典的变化。

不过,keys() 视图具有集合式操作能力,而 values() 视图不被视为集合式对象,因为字典中的值可以重复。

注意事项

  • 不能直接通过索引访问:d.values()[0] 会引发 TypeError。
  • 不能通过视图直接增删元素:应操作原字典,视图会自动反映变化。
  • 不能依赖 values() 进行内容相等比较:需要时先转换为列表,或者根据业务需求采用其他比较方式。
  • 遍历时尽量不要增删字典元素:可能引发 RuntimeError,也可能导致遍历不完整。
  • 允许重复值:与字典的键不同,值没有唯一性要求。
  • 顺序与字典一致:Python 3.7 及以上版本保证按键的插入顺序返回对应的值。

总结

Python 字典的 values() 方法用于获取字典中的所有值,并返回一个动态的 dict_values 视图对象。

它常用于遍历字典值、统计数值总和、判断某个值是否存在,以及将字典值转换为列表等场景。

在实际开发中,如果只需要遍历或读取字典中的值,可以直接使用 values();如果需要保留当前值的列表副本,则可以使用 list(d.values())。


Python3 字典 Python3 字典