python - `for` 循环如何在字典上具体工作

标签 python python-3.x for-loop dictionary

我想知道 for 到底是怎么回事?循环访问字典中的键? 它叫 dict.keys()并迭代该列表?

我问的原因是我想查询字典的键,任何键,我想知道调用之间的性能(除了视觉效果和可读性之外)是否存在差异:

for key in dict:
    my_func(dict[key])
    break

my_func(dict.keys()[0]) 

这让我想到了上面的问题 - python 在 for 期间做什么?循环播放 dict具体来说,在幕后?

最佳答案

迭代dict不会调用dict.key()。字典本身支持迭代。

>>> iter({'name': 'value'})
<dict_keyiterator object at 0x7f127da89688>

顺便说一句,dict.keys在Python 3.x中返回不支持索引的字典键 View 。

>>> {'name': 'value'}.keys()
dict_keys(['name'])
>>> {'name': 'value'}.keys()[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'dict_keys' object does not support indexing

如果你想获取任意 key ,可以使用nextiter:

>>> next(iter({'name': 'value', 'name2': 'another value'}))
'name'

>>> next(iter({}))  # <--  To handle empty case, pass default value
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
>>> next(iter({}), 'default value')
'default value'

关于python - `for` 循环如何在字典上具体工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36174723/

相关文章:

python - 与数据框和数组一起使用时如何使用 scipy griddata

oracle - PL/SQL for LOOP隐式游标

angularjs - Angular : watch not working inside loop

python - 为什么 pyenv 声明一个版本没有安装,尽管它确实存在?

python - 如何更改数组布局?

python - 如何在 PySpark 1.6.1 中将第二个数据帧的列传递到 UDF 中

python - tensorflow中的MNIST分类,RecursionError : maximum recursion depth exceeded

python - 弹性 beantalk 需要 python 3.5

python - 使用 tf.optimizer.Adam 来最小化 Tensorflow Core 2 alpha 中变量的损失的正确方法

batch-file - 如何获取分配给在循环内处理的环境变量的逗号分隔字符串的每个项目?