python - python中的list(dictionary) vs dictionary.keys() vs list(dictionary.keys())
问题描述
给定一个字典 my_dict,我们list(my_dict)
在my_dict.keys()
下面的代码中应用
my_dict = {'1': 1, '2': 2, '3': 3, '4': 4}
list_keys = list(my_dict)
view_keys = my_dict.keys()
list_from_view = list(my_dict.keys())
print("list_keys : ", list_keys)
print("view_keys : ", view_keys)
print("list_from_view", list_from_view)
结果:
list_keys : ['1', '2', '3', '4']
view_keys : dict_keys(['1', '2', '3', '4'])
list_from_view ['1', '2', '3', '4']
使用 list(my_dict)、my_dict.keys() 和 list(my_dict.keys()) 有什么区别,特别是:
- list(my_dict) 与 my_dict.keys()
- list(my_dict) vs list(my_dict.keys()) (获取键列表的最佳(快速)方法是什么)
谢谢。
解决方案
Python 列表是一个可迭代对象,但并非所有可迭代对象都是列表......
让我们检查一下您的表达方式:
list_keys = list(my_dict)
:在这里,您将my_dict
其用作键的可迭代对象并从中构建一个新列表。长话短说,您已将密钥复制到列表中。从那时起,您可以对列表或初始字典应用任何更改,而无需对其他对象进行任何更改view_keys = my_dict.keys()
: 在这里您可以dict_keys
查看字典。它是一个不可修改的可迭代对象,可用于访问字典的键。如果您向字典中添加一个项目,您将立即在视图中看到它,但您既不能添加新元素,view_keys
也不能更改或删除一个list_from_view = list(my_dict.keys())
:在这里您可以访问键的视图,并对其进行迭代以构建列表。最后和第一种方式完全一样:你得到一个独立的列表
哪个最好?这取决于。
正如我已经说过的,1 和 3 给出了等效的列表。1 可能更Pythonic,因为它使用了 Python 字典隐式可迭代其键这一事实。对于 Python 新用户来说,3 可能更容易理解,因为它显式地引用了对键的操作。
2 是一种完全不同的动物,因为您没有独立的列表对象,而是对初始字典有一个视图,该字典将跟随它的变化。
现在的问题:
获取密钥列表的最佳(快速)方法是什么
2 不会返回键列表,因为列表具有append
或remove
视图没有的方法
从性能的角度来看,1 和 3 应该被视为等效的,我已经谈到了可读性,这是 Python 代码最重要的质量
你应该问的问题:
迭代字典键列表的更pythonic方法是什么?
毫无疑问for key in my_dict
。无需将其转换为列表,并且很少需要视图
推荐阅读
- python - 如何从平面图图像中检测门窗?
- java - 如何从文本文件中检查用户名和密码的有效性
- javascript - 即使在不可变更新时,状态中的元素也会在 react.js 中被删除
- python - 将静态和动态 Fortran 库与 f2py 链接的问题
- javascript - 如何使用生命周期在 ReactJS 中运行外部 Javascript 文件插件
- netsuite - 我可以在 NetSuite 中拥有多少个子公司?我有 Oneworld Netsuite 帐户
- javascript - 函数返回未定义的值
- c# - Environment.Exit 没有关闭
- jenkins - Jenkins - groovy 脚本返回退出代码 126
- jquery - 如何使用数据值查找 table>tr