python中的列表(dictionary)vs dictionary.keys()vs列表(dictionary.keys())

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

给定一个字典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())有什么区别,特别是:

  • 列表(我的字典)与我的字典键()
  • 列表(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号应该