使用和不使用keys()方法对字典键进行迭代之间的区别

idk*_*idk 6 python dictionary for-loop key

.keys()Python中带方法和不带方法的字典中的for循环有什么区别.keys()

thisdict = {
  "brand": "Ford",
  "model": "Mustang",
  "year": 1964
}
for i in thisdict:
    print(i)
for i in thisdict.keys():
    print(i)
Run Code Online (Sandbox Code Playgroud)

有什么不同?

col*_*yre 5

来自Python文档

\n\n
\n

键()

\n\n

    返回字典\xe2\x80\x99s 键的新视图。请参阅视图对象的文档

\n
\n\n

并从上面的链接:

\n\n
\n

dict.keys()、dict.values() 和 dict.items() 返回的对象是视图对象。它们提供了字典\xe2\x80\x99s条目的动态视图,这意味着当字典更改时,视图会反映这些更改。

\n\n

字典视图可以迭代以生成各自的数据,并支持成员资格测试 [...]

\n
\n\n

如果没有keys()方法,您只需对可用键进行迭代器(这可能是首选),正如您在此处看到的那样(与第二个相同,但不加载和调用keys方法):

\n\n
In [1]: import dis                                                              \n\nIn [2]: dis.dis("for i in {None: None}: print(i)")                              \n  1           0 LOAD_CONST               0 (None)\n              2 LOAD_CONST               0 (None)\n              4 BUILD_MAP                1\n              6 GET_ITER\n        >>    8 FOR_ITER                12 (to 22)\n             10 STORE_NAME               0 (i)\n             12 LOAD_NAME                1 (print)\n             14 LOAD_NAME                0 (i)\n             16 CALL_FUNCTION            1\n             18 POP_TOP\n             20 JUMP_ABSOLUTE            8\n        >>   22 LOAD_CONST               0 (None)\n             24 RETURN_VALUE\n\nIn [3]: dis.dis("for i in {None: None}.keys(): print(i)")                       \n  1           0 LOAD_CONST               0 (None)\n              2 LOAD_CONST               0 (None)\n              4 BUILD_MAP                1\n              6 LOAD_METHOD              0 (keys)\n              8 CALL_METHOD              0\n             10 GET_ITER\n        >>   12 FOR_ITER                12 (to 26)\n             14 STORE_NAME               1 (i)\n             16 LOAD_NAME                2 (print)\n             18 LOAD_NAME                1 (i)\n             20 CALL_FUNCTION            1\n             22 POP_TOP\n             24 JUMP_ABSOLUTE           12\n        >>   26 LOAD_CONST               0 (None)\n             28 RETURN_VALUE\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果您只想迭代字典的键,则无需调用keys()方法,它可以为您提供字典\xe2\x80\x99s条目的动态视图。

\n


小智 1

keys ()方法返回一个类似集合的对象,该对象可用于计算与其他字典的交集等。就您而言,由于您只是迭代,因此根本没有实际差异。