首页 > 解决方案 > 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()) 有什么区别,特别是:

  1. list(my_dict) 与 my_dict.keys()
  2. list(my_dict) vs list(my_dict.keys()) (获取键列表的最佳(快速)方法是什么)

谢谢。

标签: pythondictionary

解决方案


Python 列表是一个可迭代对象,但并非所有可迭代对象都是列表......

让我们检查一下您的表达方式:

  1. list_keys = list(my_dict):在这里,您将my_dict其用作键的可迭代对象并从中构建一个新列表。长话短说,您已将密钥复制到列表中。从那时起,您可以对列表或初始字典应用任何更改,而无需对其他对象进行任何更改

  2. view_keys = my_dict.keys(): 在这里您可以dict_keys查看字典。它是一个不可修改的可迭代对象,可用于访问字典的键。如果您向字典中添加一个项目,您将立即在视图中看到它,但您既不能添加新元素,view_keys也不能更改或删除一个

  3. list_from_view = list(my_dict.keys()):在这里您可以访问键的视图,并对其进行迭代以构建列表。最后和第一种方式完全一样:你得到一个独立的列表

哪个最好?这取决于。

正如我已经说过的,1 和 3 给出了等效的列表。1 可能更Pythonic,因为它使用了 Python 字典隐式可迭代其键这一事实。对于 Python 新用户来说,3 可能更容易理解,因为它显式地引用了对键的操作。

2 是一种完全不同的动物,因为您没有独立的列表对象,而是对初始字典有一个视图,该字典将跟随它的变化。

现在的问题:

获取密钥列表的最佳(快速)方法是什么

2 不会返回键列表,因为列表具有appendremove视图没有的方法

从性能的角度来看,1 和 3 应该被视为等效的,我已经谈到了可读性,这是 Python 代码最重要的质量

你应该问的问题:

迭代字典键列表的更pythonic方法是什么?

毫无疑问for key in my_dict。无需将其转换为列表,并且很少需要视图


推荐阅读