python中的列表(dictionary)vs dictionary.keys()vs列表(dictionary.keys())
给定一个字典my_dict,我们在下面的代码中应用python中的列表(dictionary)vs dictionary.keys()vs列表(dictionary.keys()),python,dictionary,Python,Dictionary,给定一个字典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_ke
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())有什么区别,特别是:
列表(我的字典)与我的字典键()
列表(my_dict)与列表(my_dict.keys())(获取密钥列表的最佳(快速)方法是什么)
谢谢。它们的主要区别在于两种类型,即list
和dict\u键
list
是从给定的键中同时获取所有值,并将它们存储到list
对象中
另一方面,dict_keys
对象为您提供字典键的视图
它们之间的区别如下所示:
d = {1: 2, 3: 4}
a = d.keys()
b = list(d)
a
# dict_keys([1, 3])
b
# [1, 3]
d[5] = 6
a
# dict_keys([1, 3, 5])
b
# [1, 3]
总之,dict_keys
对象将在引入后立即向您显示对dict
的更新,而列表将保持不变
如果您对列表进行更改
,这些更改将不会反映到dict
,而另一方面,您不能对dict\u键进行更改
,这两种键的主要区别在于两种类型,即列表
和dict\u键
list
是从给定的键中同时获取所有值,并将它们存储到list
对象中
另一方面,dict_keys
对象为您提供字典键的视图
它们之间的区别如下所示:
d = {1: 2, 3: 4}
a = d.keys()
b = list(d)
a
# dict_keys([1, 3])
b
# [1, 3]
d[5] = 6
a
# dict_keys([1, 3, 5])
b
# [1, 3]
总之,dict_keys
对象将在引入后立即向您显示对dict
的更新,而列表将保持不变
如果您更改列表
,这些更改将不会反映到dict
,而另一方面,您无法更改dict\u键
Python列表是可编辑的,但并非所有的可编辑都是列表
让我们看看你的表情:
list\u keys=list(my\u dict)
:这里您使用my\u dict
作为键上的一个iterable,并从中构建一个新列表。长话短说,您已将密钥复制到列表中。从那时起,您可以对列表或初始dict应用任何更改,而无需对其他对象进行任何更改
view\u keys=my\u dict.keys()
:这里是字典上的dict\u keys
视图。它是一个不可修改的iterable,可用于访问字典的键。如果向词典中添加一个项目,您将立即在视图中看到它,但您既不能向view\u key
添加新元素,也不能更改或删除新元素
list\u from\u view=list(my\u dict.keys())
:在这里,您可以访问键上的视图,并对其进行迭代以构建列表。最后,它与第一种方法完全相同:您得到一个独立的列表
哪一个最好?视情况而定
正如我已经说过的,1和3给出了等价的列表。1可能更像Python,因为它使用了一个事实,即Python字典在其键上是隐式的iterable。3对于新的Python用户来说可能更容易理解,因为它显式地引用了键上的操作
2是一个完全不同的动物,因为它没有独立的列表对象,而是在初始字典上有一个视图,该视图将跟随它的更改
现在回答问题:
获取密钥列表的最佳(快速)方法是什么
2不会返回键列表,因为列表具有视图没有的append
或remove
方法
从性能的角度来看,1和3应该是等价的,我已经谈到了可读性,这是Python代码最重要的质量
你应该问的问题是:
什么是迭代字典键列表的更具python风格的方法
毫无疑问,用于my_dict中的键
。无需将其转换为列表,并且很少需要视图Python列表是可编辑的,但并非所有的可编辑都是列表
让我们看看你的表情:
list\u keys=list(my\u dict)
:这里您使用my\u dict
作为键上的一个iterable,并从中构建一个新列表。长话短说,您已将密钥复制到列表中。从那时起,您可以对列表或初始dict应用任何更改,而无需对其他对象进行任何更改
view\u keys=my\u dict.keys()
:这里是字典上的dict\u keys
视图。它是一个不可修改的iterable,可用于访问字典的键。如果向词典中添加一个项目,您将立即在视图中看到它,但您既不能向view\u key
添加新元素,也不能更改或删除新元素
list\u from\u view=list(my\u dict.keys())
:在这里,您可以访问键上的视图,并对其进行迭代以构建列表。最后,它与第一种方法完全相同:您得到一个独立的列表
哪一个最好?视情况而定
正如我已经说过的,1和3给出了等价的列表。1可能更像Python,因为它使用了一个事实,即Python字典在其键上是隐式的iterable。3对于新的Python用户来说可能更容易理解,因为它显式地引用了键上的操作
2是一个完全不同的动物,因为它没有独立的列表对象,而是在初始字典上有一个视图,该视图将跟随它的更改
现在回答问题:
获取密钥列表的最佳(快速)方法是什么
2不会返回键列表,因为列表具有视图没有的append
或remove
方法
1号和3号应该