python的字典的items(), keys(), values() 您所在的位置:网站首页 字典的items方法返回值类型 python的字典的items(), keys(), values()

python的字典的items(), keys(), values()

2024-07-08 04:25| 来源: 网络整理| 查看: 265

之前用过,但是没弄明白

只知道这三个东西返回的肯定是一个可迭代对象,但是具体是啥就不太清楚,基础知识不太扎实

今天写这篇文章 https://blog.csdn.net/qq_43657442/article/details/108338507时突然想到的,闲来有空便整理记录下

首先说结论

在 python2.X中 他们三个都返回一个list ,即返回值是一个列表

python2.7示例

a={'a':1,'b':2,'c':3,'d':4,'efg':567} print(a.items()) print(a.keys()) print(a.values())

输出

[('a', 1), ('b', 2), ('c', 3), ('d', 4), ('efg', 567)] ['a', 'b', 'c', 'd', 'efg'] [1, 2, 3, 4, 567]

在 python3.X中 他们三个都返回一个 dict 对象的 视图,都是 视图对象

python3.7示例

a={'a':1,'b':2,'c':3,'d':4,'efg':567} print(a.items()) print(a.keys()) print(a.values())

输出

dict_items([('a', 1), ('b', 2), ('c', 3), ('d', 4), ('efg', 567)]) dict_keys(['a', 'b', 'c', 'd', 'efg']) dict_values([1, 2, 3, 4, 567])

       可以发现, items() 、keys()、values() 返回值的类型分别为 dict_items、dict_keys、dict_values 。并不像 python2.X 返回值是一个列表

       视图对象是一个 iterable 对象,它主要有三个特点:

第一,视图对象不是list,所以list方法对视图对象无法直接使用; 第二,视图对象动态跟踪字典的变化; 第三,对于dict.keys来说,返回的视图对象是一个 set-like(类似集合) 对象,因此可以使用 set 的方法来进行操作,但是,dict.values 返回的不是一个 set-like 的对象,因此无法使用 set 的方法来操作,这儿呢也好理解,键是独一无二的,但是值不是独一无二的(Set中的元素只会出现一次,即 Set 中的元素是唯一的)。 dict.items当且仅当包含唯一的对,并且只包含不可变对象,那么它也是 set-like 的

       对我来说,似乎只要知道他是一个 iterable 对象就好了,把它作为参数带入到函数中达到我的目的,就比如 itertools 中的 permutations 实现全排列和任意排列 这篇文章一样

扩展资料

       如果想进一步了解视图对象是什么,为什么要用视图对象,视图对象有什么好处等,可以参考如下链接

https://www.thinbug.com/q/47273297 https://kb.kutu66.com/others/post_13439649 https://cloud.tencent.com/developer/ask/73833https://cloud.tencent.com/developer/ask/73833

      大概的意思使用 视图对象,你可以迭代实际的数据结构,而无需中间列表,加快速度的人同时降低内存开销。

      视图对象存储对 dict 的引用,并将视图上的操作转换为dict上的相应操作,直接遍历 dict 的底层存储,具体的原理可能要涉及到一些计算机底层的东西,我也不是很了解

当然,你要把 dict_items、dict_keys、dict_values 类型的变成 list 也简单,强制转换就好了

示例

a={'a':1,'b':2,'c':3,'d':4,'efg':567} print(list(a.items())) print(list(a.keys())) print(list(a.values()))

输出

[('a', 1), ('b', 2), ('c', 3), ('d', 4), ('efg', 567)] ['a', 'b', 'c', 'd', 'efg'] [1, 2, 3, 4, 567]



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有