Сравнение keys()
и sorted()
На предыдущем этапе вы узнали, как использовать функцию sorted()
вместе с методом keys()
для перебора элементов словаря в отсортированном порядке. На этом этапе мы более подробно рассмотрим различия между прямым использованием keys()
и использованием sorted()
с keys()
. Понимание этих различий является важным для написания эффективного и читаемого кода на Python.
Метод keys()
возвращает объект представления (view object), который представляет динамическое представление ключей словаря. Это означает, что если словарь изменится, объект представления отобразит эти изменения. Однако сам объект представления не является списком и не поддерживает прямую сортировку.
С другой стороны, функция sorted()
возвращает новый список, содержащий все элементы итерируемого объекта в порядке возрастания. Когда вы используете sorted(my_dict.keys())
, вы создаете новый отсортированный список ключей словаря, при этом исходный словарь и его объект представления остаются неизменными.
Покажем это на примере. Откройте файл sort_keys.py
в каталоге ~/project
с помощью редактора VS Code и измените его следующим образом:
## Create a dictionary
my_dict = {"b": 2, "a": 1, "c": 3}
## Get the keys view object
keys_view = my_dict.keys()
## Print the keys view object
print("Keys view object:", keys_view)
## Print the sorted keys
sorted_keys = sorted(my_dict.keys())
print("Sorted keys:", sorted_keys)
## Modify the dictionary
my_dict["d"] = 4
## Print the keys view object again
print("Keys view object after modification:", keys_view)
## Iterate through the dictionary using the sorted keys
for key in sorted_keys:
print(f"Key: {key}, Value: {my_dict[key]}")
В этом коде:
- Мы создаем словарь с именем
my_dict
.
- Получаем объект представления ключей с помощью
my_dict.keys()
и сохраняем его в переменной keys_view
.
- Выводим объект
keys_view
и список sorted_keys
.
- Затем модифицируем словарь, добавив новую пару ключ-значение.
- Выводим объект
keys_view
еще раз, чтобы показать, что он отражает изменения в словаре.
- Наконец, перебираем список
sorted_keys
и выводим пары ключ-значение. Обратите внимание, что список sorted_keys
остается неизменным и не отражает добавление ключа "d"
.
Теперь запустите скрипт с помощью следующей команды:
python sort_keys.py
Вы должны увидеть следующий вывод:
Keys view object: dict_keys(['b', 'a', 'c'])
Sorted keys: ['a', 'b', 'c']
Keys view object after modification: dict_keys(['b', 'a', 'c', 'd'])
Key: a, Value: 1
Key: b, Value: 2
Key: c, Value: 3
Обратите внимание на то, что:
- Объект
keys_view
представляет динамическое представление ключей словаря. Когда мы модифицируем словарь, объект keys_view
отражает эти изменения.
- Список
sorted_keys
представляет статический список, содержащий ключи на момент его создания. Он не отражает изменения, внесенные в словарь позже.
- Цикл перебирает только те ключи, которые были в словаре на момент создания
sorted_keys
.
Этот пример наглядно показывает основное различие между keys()
и sorted()
. keys()
предоставляет динамическое представление, в то время как sorted()
создает статический отсортированный список. Выберите подходящий метод в зависимости от того, нужно ли вам отражать изменения в словаре или работать с фиксированным набором отсортированных ключей.