代码之家  ›  专栏  ›  技术社区  ›  Matt Patenaude

Python字典循环(使用C API)两次?

  •  1
  • Matt Patenaude  · 技术社区  · 11 年前

    我目前正在用C编写一个Python模块。在其中,我有一个字典,我可以这样迭代:

    PyObject *key, *value;
    Py_ssize_t pos = 0;
    
    while (PyDict_Next(index, &pos, &key, &value))
        /* do interesting things here */
    

    稍后用同样的方法,我想再次循环遍历字典。然而 PyDict_Next(...) 继续返回 NULL 。是否有任何方法可以重置使用的内部迭代计数器 PyDict_Next(…) ?

    1 回复  |  直到 11 年前
        1
  •  3
  •   tdelaney    11 年前

    迭代器是通过将pos设置为0来初始化的。您可以通过再次将pos设置为0来重新启动迭代器。

    PyObject *key, *value;
    Py_ssize_t pos = 0;
    
    while (PyDict_Next(index, &pos, &key, &value))
        /* do interesting things here */
    
    pos = 0;
    
    while (PyDict_Next(index, &pos, &key, &value))
        /* do even more interesting things here */