Python 如何设法循环遍历字典中的值?
How does Python manage to loop through values in a dictionary?
我想知道 Python 如何循环遍历字典中的值。我知道如何在代码中做到这一点,我读过的所有答案都只是解释了如何去做。
我想了解 python 如何找到值,因为我认为字典值与键相关联。字典项目是否也有索引值或其他东西?
感谢您提前回答或参考相关来源:)
我用 Google 搜索、Whosebug 和阅读。
编辑:我对 Python3.7 如何做到这一点很感兴趣
根据源代码 (dict_items(PyDictObject *mp)
) 分配了一个包含 n 个(字典中 key/value 对的大小)元组的列表,并且对于每个 non-null 值项 (第 2278 行:if (value != NULL)
),它被设置在元组列表的相应索引处。
python 对象本身基本上是一块内存,它知道每个对象的大小 (offset
)、值的起始位置 (value_ptr
) 以及键的位置 (ep
).因此,当您获得 keys/values (for k,v in object
) 时,它基本上会遍历对象已分配内存的已用部分。
顺便说一下,了解 PyList_SET_ITEM 只是一个宏,可以通过其所需的索引设置数组中的值:#define PyList_SET_ITEM(op, i, v) (((PyListObject *)(op))->ob_item\[i\] = (v))
。由于数组只是按顺序存储在内存中的值,因此索引运算符知道将值放在 start + (sizeOf(object)*index)
.
的内存位置
免责声明:这是我第一次尝试阅读 python 源代码,因此我的解释可能有点偏离或过于简单化。
我想知道 Python 如何循环遍历字典中的值。我知道如何在代码中做到这一点,我读过的所有答案都只是解释了如何去做。 我想了解 python 如何找到值,因为我认为字典值与键相关联。字典项目是否也有索引值或其他东西? 感谢您提前回答或参考相关来源:)
我用 Google 搜索、Whosebug 和阅读。
编辑:我对 Python3.7 如何做到这一点很感兴趣
根据源代码 (dict_items(PyDictObject *mp)
) 分配了一个包含 n 个(字典中 key/value 对的大小)元组的列表,并且对于每个 non-null 值项 (第 2278 行:if (value != NULL)
),它被设置在元组列表的相应索引处。
python 对象本身基本上是一块内存,它知道每个对象的大小 (offset
)、值的起始位置 (value_ptr
) 以及键的位置 (ep
).因此,当您获得 keys/values (for k,v in object
) 时,它基本上会遍历对象已分配内存的已用部分。
顺便说一下,了解 PyList_SET_ITEM 只是一个宏,可以通过其所需的索引设置数组中的值:#define PyList_SET_ITEM(op, i, v) (((PyListObject *)(op))->ob_item\[i\] = (v))
。由于数组只是按顺序存储在内存中的值,因此索引运算符知道将值放在 start + (sizeOf(object)*index)
.
免责声明:这是我第一次尝试阅读 python 源代码,因此我的解释可能有点偏离或过于简单化。