gpt4 book ai didi

python - 从字典中获取键 : keys() vs 'keys for keys in dict.keys()'

转载 作者:太空宇宙 更新时间:2023-11-03 14:47:11 26 4
gpt4 key购买 nike

在我开始使用 Python 的过程中尝试找出最佳编码实践。我用 Pandas 写了一个 csv 到数据框阅读器。它使用格式:

dataframe = read_csv(csv_input, usecols=column_names, dtype=test_dictionary)

我们使用字典来确定要导入的列及其关联的数据类型。例如:

test_dictionary = {'column1': int, 'column2': float, 'column3': string}

现在要分配第二个参数 usecols,我们可以从字典中获取键以仅获取列的名称(column1、column2、column3)。我使用了按键方法:

column_names = test_dictionary.keys()

有人检查我的代码,改为:

column_names = [keys for keys in test_dictionary.keys()]

有人可以向我解释为什么人们会选择一种方法而不是另一种方法来将字典中的键分配给变量吗?

最佳答案

在 Python 3 中,keys() 不返回列表,而是返回 a "view" of the keys in the dictionary .

>>> d = {'x': 1, 'y': 2, 'z': 3}
>>> keys = d.keys()
>>> keys
dict_keys(['x', 'y', 'z'])

此 View 在两个主要方面不同于列表:

  1. 您不能修改它:

    >>> keys.append('k')
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    AttributeError: 'dict_keys' object has no attribute 'append'
  2. 如果字典发生变化, View 会反射(reflect)这些变化:

    >>> del d['z']
    >>> keys
    dict_keys(['x', 'y'])

如果您需要修改它或希望它独立于原始字典,您可能希望将此 View 转换为列表。

除列表外,其他适用于这些目的的标准容器是集合(读写)和元组或卡住集(只读)。

值得一提的是这段代码:

column_names = [keys for keys in test_dictionary.keys()]

可以像这样以更紧凑和快速的方式重写(感谢 Cleb 指出!):

column_names = list(test_dictionary)

另一件需要注意的事情是遍历列表可能比遍历 View 稍微快一些。那是因为列表有更好的内存表示。 (但是,这是一个非常笼统的说法:字典中的项目数、创建列表所需的时间以及 Python 版本等因素会对整体性能产生很大影响。)

关于python - 从字典中获取键 : keys() vs 'keys for keys in dict.keys()' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48391061/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com