Это, вероятно, лучший способ (сейчас вы получаете первый ключ, next(iter(d.values()))
получает ваше значение).
Эта операция (любая итерация через keys
, values
или items
по крайней мере, для комбинированных таблиц повторяет через массив, содержащий словарные записи :
PyDictKeyEntry *entry_ptr = &DK_ENTRIES(k)[i];
while (i < n && entry_ptr->me_value == NULL) {
entry_ptr++;
i++;
}
entry_ptr->me_value
содержит значение для каждого соответствующего ключа.
Если ваш словарь создан заново, он находит первый вставленный элемент во время первой итерации (массив записей словаря доступен только для добавления, следовательно, сохраняется порядок).
Если ваш словарь был изменен (вы удалили много элементов), в худшем случае это может привести к O (N), чтобы найти первый (среди оставшихся элементов) вставленный элемент (где N общее количество оригинальных предметов). Это происходит из-за того, что словари не изменяют размер при удалении элементов, и, как следствие, entry_ptr->me_value
составляет NULL
для многих записей.
Обратите внимание, что это CPython Speci c. Я не знаю, как другие реализации Python реализуют это.