Items: перевод слова и метод dict.items() в Python

Items: перевод слова и метод dict.items() в Python Полезное

Items — множественное число английского слова item: «элемент, пункт, предмет, позиция». В разработке чаще всего встречается как dict.items() — метод словаря Python, который возвращает пары «ключ — значение». Ниже — короткий перевод, потом метод по шагам: перебор, view-объект, ошибки и аналоги в других языках. Примеры проверены на Python 3.14.7 (сентябрь 2026).

Перевод: что значит item и items

Произносится примерно как «айтем», во множественном числе «айтемз». Русский перевод зависит от контекста — одного универсального слова нет.

Контекст Пример Перевод
Список, повестка the next item on the agenda следующий пункт повестки
Магазин, заказ 3 items in your cart 3 товара в корзине
Бюджет, счет a budget item статья бюджета, позиция
Игры rare items, inventory items редкие предметы, предметы инвентаря
Интерфейс menu item, list item пункт меню, элемент списка
Код, данные dict.items(), "items": [...] пары словаря, массив элементов

Главное для разработчика: item — это один элемент какой-то коллекции, items — сами элементы или их набор. Именно в этом смысле слово живет в названиях методов, полей и компонентов.

Метод dict.items() в Python: минимальный пример

Словарь (dict) хранит пары «ключ — значение». Метод items() не принимает аргументов и возвращает все пары. Самый частый сценарий — перебрать словарь, получая ключ и значение сразу:

prices = {"кофе": 250, "чай": 180, "сок": 320}

for name, price in prices.items():
    print(f"{name}: {price} руб.")

print(prices.items())
print(type(prices.items()).__name__)

Вывод:

кофе: 250 руб.
чай: 180 руб.
сок: 320 руб.
dict_items([('кофе', 250), ('чай', 180), ('сок', 320)])
dict_items

Что здесь происходит по шагам:

  1. prices.items() отдает объект типа dict_items, каждый элемент которого — кортеж (ключ, значение).
  2. Цикл for name, price in ... на каждом шаге распаковывает кортеж в две переменные.
  3. Порядок пар совпадает с порядком добавления ключей: с Python 3.7 сохранение порядка вставки — гарантия языка для dict.

keys(), values() и items(): что выбрать

У словаря три похожих метода. Выбор зависит от того, что нужно внутри цикла.

Метод Что возвращает Тип объекта Когда брать
d.keys() ключи dict_keys нужны только ключи (или просто for k in d)
d.values() значения dict_values нужны только значения: сумма, максимум
d.items() пары (ключ, значение) dict_items нужны и ключ, и значение

Частый антипаттерн — перебирать ключи и доставать значение отдельно: for k in d: print(k, d[k]). Это работает, но items() читается проще и не делает лишний поиск по ключу на каждом шаге.

Что такое view-объект и почему это важно

dict_items — это представление (view), а не копия данных. Оно не хранит пары отдельно, а смотрит на сам словарь. Если словарь изменился, представление сразу это «видит». Список, созданный через list(), наоборот, фиксирует снимок на момент вызова.

prices = {"кофе": 250, "чай": 180}
view = prices.items()
snapshot = list(prices.items())

prices["сок"] = 320
print(view)
print(snapshot)
print(len(view), ("чай", 180) in view)
print(view.mapping)

Вывод:

dict_items([('кофе', 250), ('чай', 180), ('сок', 320)])
[('кофе', 250), ('чай', 180)]
3 True
{'кофе': 250, 'чай': 180, 'сок': 320}

Представление поддерживает len(), проверку in и перебор, но не индексацию: view[0] не сработает, для этого нужен list(view). Атрибут mapping (ссылка на исходный словарь) появился в Python 3.10.

Типичные задачи с items()

Сортировка словаря по значению, фильтрация и «разворот» ключей и значений делаются через items() в одну строку:

prices = {"кофе": 250, "чай": 180, "сок": 320}

by_price = sorted(prices.items(), key=lambda item: item[1], reverse=True)
print(by_price)

cheap = {name: price for name, price in prices.items() if price < 300}
print(cheap)

by_value = {price: name for name, price in prices.items()}
print(by_value)

print(list(reversed(prices.items())))

Вывод:

[('сок', 320), ('кофе', 250), ('чай', 180)]
{'кофе': 250, 'чай': 180}
{250: 'кофе', 180: 'чай', 320: 'сок'}
[('сок', 320), ('чай', 180), ('кофе', 250)]

Граница «разворота»: если у двух ключей одинаковое значение, в новом словаре останется только последняя пара — ключи обязаны быть уникальными. reversed() для представлений словаря работает с Python 3.8.

dict_items ведет себя как множество, поэтому два словаря можно сравнить операциями - и &. Например, найти, какие пары добавились или поменялись:

old = {"кофе": 250, "чай": 180}
new = {"кофе": 270, "чай": 180, "сок": 320}
print(sorted(new.items() - old.items()))
print(new.items() & old.items())

Вывод:

[('кофе', 270), ('сок', 320)]
{('чай', 180)}

Результат операции — обычное множество, порядок в нем не гарантирован, поэтому в примере он отсортирован. Ограничение: значения должны быть хешируемыми. Если значение — список, a.items() & b.items() падает с TypeError: cannot use 'tuple' as a set element (unhashable type: 'list'), хотя сравнение a.items() == b.items() при этом работает.

Частые ошибки

Ошибка 1: удаление ключей во время перебора. Код пытается убрать из словаря товары с нулевым остатком:

stock = {"кофе": 0, "чай": 5, "сок": 0}
for name, qty in stock.items():
    if qty == 0:
        del stock[name]

Результат:

RuntimeError: dictionary changed size during iteration

Представление «живое», и изменение размера словаря ломает перебор. Исправление — перебирать снимок или собрать новый словарь:

stock = {"кофе": 0, "чай": 5, "сок": 0}
for name, qty in list(stock.items()):
    if qty == 0:
        del stock[name]
print(stock)

stock = {"кофе": 0, "чай": 5, "сок": 0}
stock = {name: qty for name, qty in stock.items() if qty > 0}
print(stock)

Оба варианта печатают {'чай': 5}. Менять значения у существующих ключей во время перебора можно — ошибку вызывает только добавление или удаление ключей.

Ошибка 2: забыли вызвать items(). Цикл for name, price in prices: перебирает только ключи и пытается разложить строку "кофе" на две переменные:

ValueError: too many values to unpack (expected 2)

Исправление — for name, price in prices.items():. Коварный случай: если все ключи — строки ровно из двух символов, ошибки не будет, и в переменные молча попадут отдельные буквы.

Ошибка 3: код из старых учебников. В Python 2 были iteritems() и viewitems(), в Python 3 их нет:

AttributeError: 'dict' object has no attribute 'iteritems'

Исправление — просто items(): в Python 3 он уже возвращает легкое представление, а не копию списка.

Items в других языках и инструментах

Идея «перебрать пары ключ — значение» есть везде, но называется по-разному. Все строки таблицы проверены запуском на примере словаря цен.

Язык Аналог dict.items()
JavaScript Object.entries(obj), для Map — перебор for (const [k, v] of map)
Java map.entrySet(), элемент — Map.Entry с getKey() и getValue()
C# foreach (var (k, v) in dict), элемент — KeyValuePair
PHP foreach ($arr as $k => $v)

Слово items встречается и вне словарей. В WinForms у ListBox свойство Items — коллекция строк списка. В ответах многих REST API поле "items" содержит массив записей текущей страницы выдачи. У pandas.DataFrame тоже есть метод items(), но он перебирает пары «имя столбца — столбец», а не строки. В играх items — предметы инвентаря и добыча, в интернет-магазинах — позиции заказа (line items).

Выводы

  • Item — «элемент, пункт, предмет», items — набор элементов; точный перевод зависит от контекста.
  • dict.items() в Python возвращает пары (ключ, значение) и нужен, когда в цикле требуются и ключ, и значение.
  • Результат — view-объект dict_items: он отражает изменения словаря, поддерживает len, in и операции множеств, но не индексацию.
  • Удалять или добавлять ключи во время перебора items() нельзя — перебирайте list(d.items()) или соберите новый словарь.
  • В других языках та же идея: Object.entries в JavaScript, entrySet() в Java, KeyValuePair в C#.

Где применяется / связь с практикой

Словари и items() — повседневный инструмент: разбор JSON из API, подсчет частот, настройки приложения, группировка данных перед записью в базу. Уверенная работа с коллекциями — одна из первых вещей, которую проверяют на собеседовании джуна.

Освойте тему на практике

Если хочется системно пройти Python от синтаксиса и структур данных до собственных проектов, посмотрите программу курса Python Developer. Basic. Чтобы сначала попробовать формат, подойдут бесплатные открытые уроки Otus.

FAQ

Быстрее ли items(), чем перебор ключей с d[k]?
Обычно немного быстрее, потому что не нужен отдельный поиск по ключу, но разница заметна только на больших словарях — выбирать стоит по читаемости.

Как получить первую пару словаря?
next(iter(d.items())) вернет первую пару в порядке вставки; на пустом словаре будет StopIteration.

Можно ли передать d.items() в функцию, которая ждет список?
Если функция только перебирает элементы — да; если обращается по индексу или меняет список, передайте list(d.items()).

OTUS Журнал
Скидка 5% 12-19 октября на курсы (popup)
Бесплатные открытые уроки (поп-ап)