Итерация по словарю в Python может возвращать разные элементы в зависимости от версии Python и используемого метода. Рассмотрим все варианты:
Возвращает ключи словаря:
my_dict = {'a': 1, 'b': 2, 'c': 3}
for item in my_dict:
print(item) # Выводит: 'a', 'b', 'c' (только ключи)
Доступно несколько вариантов итерации:
for key in my_dict.keys():
print(key) # 'a', 'b', 'c'
for value in my_dict.values():
print(value) # 1, 2, 3
for key, value in my_dict.items():
print(key, value) # 'a' 1, 'b' 2, 'c' 3
В Python 2.x итерация по словарю возвращала список ключей, а методы .keys()
, .values()
и .items()
возвращали списки:
# Python 2.x пример:
my_dict = {'a': 1, 'b': 2}
print(my_dict.keys()) # ['a', 'b'] (список, не view)
.keys()
, .values()
, .items()
возвращают view objects (представления), которые:
keys_view = my_dict.keys()
print(keys_view) # dict_keys(['a', 'b', 'c'])
my_dict = {'a': 1, 'b': 2}
view = my_dict.items()
print(list(view)) # [('a', 1), ('b', 2)]
my_dict['c'] = 3
print(list(view)) # [('a', 1), ('b', 2), ('c', 3)]
.keys()
и .items()
):dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 2, 'c': 3}
print(dict1.keys() & dict2.keys()) # {'b'}
print(dict1.items() - dict2.items()) # {('a', 1)}
Метод | Память | Скорость | Использование |
---|---|---|---|
Прямая итерация | O(1) | Быстро | Только ключи |
.keys() | O(1) | Быстро | Ключи с view |
.values() | O(1) | Быстро | Только значения |
.items() | O(1) | Быстро | Пары ключ-значение |
.keys()
.values()
.items()
in
работает с прямой итерацией (ключах)# Проверка наличия ключа (оптимально)
if 'a' in my_dict: # Эквивалентно 'a' in my_dict.keys()
print("Ключ найден")
В Python 3.x:
.keys()
возвращает view объектов ключей.values()
возвращает view объектов значений.items()
возвращает view объектов пар (ключ, значение)Для написания чистого и понятного кода:
.items()
для работы с парами ключ-значениеin
с самим словарем