Python3 字典 values() 方法
描述
Python3 字典 values() 方法返回一个视图对象。
dict.keys()、dict.values() 和 dict.items() 返回的都是视图对象( view objects),提供了字典实体的动态视图,这就意味着字典改变,视图也会跟着变化。
视图对象不是列表,不支持索引,可以使用 list() 来转换为列表。
我们不能对视图对象进行任何的修改,因为字典的视图对象都是只读的。
语法
values()方法语法:
dict.values()
参数
- NA。
返回值
返回视图对象。
实例
以下实例展示了 values() 方法的使用方法:
实例
>>> dishes = {'eggs': 2, 'sausage': 1, 'bacon': 1, 'spam': 500}
>>> keys = dishes.keys()
>>> values = dishes.values()
>>> # 迭代
>>> n = 0
>>> for val in values:
... n += val
>>> print(n)
504
>>> # keys 和 values 以相同顺序(插入顺序)进行迭代
>>> list(keys) # 使用 list() 转换为列表
['eggs', 'sausage', 'bacon', 'spam']
>>> list(values)
[2, 1, 1, 500]
>>> # 视图对象是动态的,受字典变化的影响,以下删除了字典的 key,视图对象转为列表后也跟着变化
>>> del dishes['eggs']
>>> del dishes['sausage']
>>> list(values)
[1, 500]
>>> #相同两个 dict.values() 比较返回都是 False
>>> d = {'a': 1}
>>> d.values() == d.values()
False
>>> keys = dishes.keys()
>>> values = dishes.values()
>>> # 迭代
>>> n = 0
>>> for val in values:
... n += val
>>> print(n)
504
>>> # keys 和 values 以相同顺序(插入顺序)进行迭代
>>> list(keys) # 使用 list() 转换为列表
['eggs', 'sausage', 'bacon', 'spam']
>>> list(values)
[2, 1, 1, 500]
>>> # 视图对象是动态的,受字典变化的影响,以下删除了字典的 key,视图对象转为列表后也跟着变化
>>> del dishes['eggs']
>>> del dishes['sausage']
>>> list(values)
[1, 500]
>>> #相同两个 dict.values() 比较返回都是 False
>>> d = {'a': 1}
>>> d.values() == d.values()
False
antilina
285***4560@qq.com
关于例子中 d.values() == d.values() 结果为 False 的问题:
我在交互式界面试了一下,发现每次 id(d.values()) 结果都不同,这可能导致例子中的比较结果为 False。
然后继续试,发现不是交互也会存在这种情况,见下面的例子:
(针对这个例子,我将 "d.values() == d.values()" 语句都删除后,其他所有输出结果都相同,id 没有变化,不知道为什么,希望有大佬解答)
但是对于类似的 dict.keys() 与 dict.items() 却有所不同。
我还发现 id(d.keys()) 也是会变的,但是会出现重复的情况,并且存在在几个 id 值之间来回重复的情况,id(d.items()) 也是这样。
在交互界面中,还有以下一个例子:
发现三个 id 值是一样的,但是如果分成三条语句,结果又不同了。
这些是我试验的结果,但是我不知道为什么id会不断的变化,以及为什么只有 id(d.values()) == id(d.values()) 的结果是 False,希望能有大佬解释一下原因,谢谢。
antilina
285***4560@qq.com