Перейти к содержимому

Как посчитать количество значений в словаре python

  • автор:

Подсчет количества элементов в словаре Python

Операции len(dict) возвращает количество элементов в словаре dict .

len(dictview) так же возвращает количество элементов в словаре, если dictview является представлением словаря dict , таким как dict.keys() , dict.values() и dict.items() .

Примеры получения длины словаря (количества элементов в словаре):

>>> x = "one": 1, "two": 2, "three": 3, "four": 4> >>> len(x) # 4 >>> keys = x.keys() >>> len(keys) # 4 >>> values = x.values() >>> len(values) # 4 >>> items = x.items() >>> len(items) # 4 
  • ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
  • Представления словарей dict.keys, dict.values и dict.items
  • Исходный словарь для представления dictview.mapping
  • Получение списка ключей словаря list(dict)
  • Количество элементов в словаре len(dict)
  • Доступ к значению словаря по ключу dict[key]
  • Добавление/изменение значения словаря по ключу key
  • Удаление значения словаря по ключу
  • Проверка наличия/отсутствия ключа key в словаре dict
  • Проверка наличия/отсутствия значения value в словаре Python
  • Проверка наличия/отсутствия пары (key, value) в словаре dict
  • Итерирование по ключам и значениям словаря Python
  • Метод dict.clear(). Очистить словарь
  • Метод dict.copy(), копия словаря
  • Метод dict.fromkeys(), словарь с ключами по умолчанию
  • Метод dict.get(), значение по умолчанию если ключа нет
  • Метод dict.items(), список кортежей
  • Метод dict.keys(), список ключей словаря
  • Метод dict.values(), список значений словаря
  • Метод dict.pop()
  • Метод dict.popitem(), получить пару ключ/значение
  • Метод dict.setdefault(), получает/вставляет значение ключа
  • Метод dict.update(), обновление/дополнение словаря
  • Объединение двух словарей в новый словарь Python
  • Сортировка словаря по значению и/или ключу
  • Обратный порядок/реверс словаря reversed(dict)
  • Генератор словаря и его использование
  • Фильтр словаря по ключам и/или значениям
  • Словарь как фабрика функций

ХОЧУ ПОМОЧЬ
ПРОЕКТУ

Посчитать количество элементов в словаре с вложениями

Как наиболее оптимально перебрать весь словарь и посчитать количество отдельных элементов, чтобы не писать слишком много циклов. Конечным значением может быть либо список (добавлять длину списка), либо строка (добавлять 1 элемент) Пока что вижу такую реализацию:

c = 0 for k in all_val.keys(): if type(all_val[k]) == list: c += len(all_val[k]) elif type(all_val[k]) == str: c += 1 else: for k2 in all_val[k]: if type(all_val[k][k2]) == list: c += len(all_val[k][k2]) elif type(all_val[k][k2]) == str: c += 1 else: for k3 in all_val[k][k2]: if type(all_val[k][k2][k3]) == list: c += len(all_val[k][k2][k3]) elif type(all_val[k][k2][k3]) == str: c += 1 else: for k4 in all_val[k][k2][k3]: if type(all_val[k][k2][k3][k4]) == list: c += len(all_val[k][k2][k3][k4]) elif type(all_val[k][k2][k3][k4]) == str: c += 1 

Отслеживать

задан 20 фев 2023 в 13:08

Елена Сергеева Елена Сергеева

505 3 3 серебряных знака 10 10 бронзовых знаков

воспользуйтесь рекурсией

20 фев 2023 в 13:09

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Вы можете рекурсивно обойти весь словарь. Вот возможный пример решения. Функция пройдется по всем уровням вложений и посчитает количество элементов в Вашем словаре.

def count_elements(my_dict): c = 0 for v in my_dict.values(): if isinstance(v, dict): c += count_elements(v) elif isinstance(v, list): c += len(v) elif isinstance(v, str): c += 1 return c 
my_dict = , 't': >, 'b': <'q': , 'y': , 'k': >, ['1', '2', '3'. ], 'c': <'c': , 'm': >> c = count_elements(my_dict) print(c) 

dict (словарь)

obj — Первым необязательным позиционным аргументом может являться отображение или итерирующийся объект (при этом каждый его элемент должен быть тоже итерирующемся и содержать ровно два объекта).

**kwargs — Поддерживаются также необязательные именованные аргументы. При использовании вкупе с позиционными аргументами и совпадении ключей значениями из именованных пользуются приоритетом.

Словари являются отображениями.
Словари являются изменяемыми объектами.

Объявление

В коде словари могут быть объявлены при помощи фигурных скобок — <> .

 my_dict = 'key': 'value', 
'sub_dict': <>,
2: [1, 2, 3, 4],
>

# Словарь как слияние других словарей
dict_one =
dict_two =

my_dict = **dict_one,
**dict_two,
> #

Кроме того, можно объявить их при помощи конструктора dict().

 # Пустой словарь. 
my_dict = dict()

# Словарь из итерирующегося объекта.
my_dict = dict(zip(['one', 'two', 'three'], [1, 2, 3]))

# Словарь из именованных аргументов.
my_dict = dict(one=1, two=2, three=3)

# Словарь из списка кортежей.
my_dict = dict([('two', 2), ('one', 1), ('three', 3)])
Ключи

Ключами словаря могут являться только объекты, поддерживающие хеширование. Таким образом, использовать в качестве ключей списки, словари и другие изменяемые типы не получится.

Если в словарь будут добавлены несколько значений с одним и тем же ключом, словарь сохранит последнее.

Не рекомендуется использоваться в качестве ключей числа с плавающей запятой, так как они хранятся в памяти в виде приближений.

Порядок ключей
Данные в обычном словаре упорядочены по очередности добавления ключей, начиная с +py3.6 (в +py2.7 — не упорядочены, но последовательность детерминирована, воспроизводима; в +py3.5 — не упорядочены, последовательность не детерминирована, не воспроизводима между запусками).

Если требуется хранить порядок, в котором в словарь были добавлены элементы (например для обхода этих элементов), следует использовать collections.OrderedDict().

Значения

В качестве значений могут использоваться любые объекты.

Получение значений
Доступ к значениям производится при помощи ключей.

Если ключ отсутствует в словаре, возбуждается исключение KeyError.
+py2.5 Чтобы изменить это поведение можно в наследнике dict определить метод __missing__(key), в котором описать нужные действия при отсутствии ключа.

 my_dict =  
my_value = my_dict['key'] # value

Установка значений
Кроме установки значений при создании словаря, можно дополнять его по мере надобности.

 my_dict =  
my_dict['new_key'] = 'new_value' # Добавляем новый элемент словаря.
Определение наличия/отсутствия элемента

+py2.2 Определить, присутствует ли ключ в словаре можно при помощи конструкции in.
+py2.2 Определить, отсутствует ли ключ в словаре можно при помощи антонимичной конструкции not in.

 my_dict = 

# in
# Ключ 'key' существует, поэтому 'my_key_present' True
my_key_present = 'key' in my_dict
# Ключ 'another_key' отсутствует в словаре, поэтому 'my_key_present' False
my_key_present = 'another_key' in my_dict

# not in
# Ключ 'key' существует, поэтому 'my_key_absent' False
my_key_absent = 'key' not in my_dict
# Ключ 'another_key' отсутствует в словаре, поэтому 'my_key_absent' True
my_key_absent = 'another_key' not in my_dict
Количество элементов в словаре

Количество элементов можно получить, используя функцию len().

 my_dict =  
my_dict_length = len(my_dict) # 1
Детали реализации CPython

Словари реализованы при помощи динамических хеш-таблиц. По сравнению с двоичными деревьями, это, в большинстве случаев, даёт выигрыш при получшении значений (наиболее часто используемая операция); кроме этого упрошается реализация.

Для каждого ключа при помощи функции hash() вычисляется хеш-код. Код этот широко варьируется в зависимости от ключа и данных процесса (например, хеш для «Python» может быть -539294296 , в то время как для «python» — отличается от первого одним битом — он будет 1142331976 ). Хеш используется для определения места (во внутреннем массиве), где хранится значение. В случае если все используемые вами ключи будут иметь различные хеши, для получения значения по ключу будет затрачено постоянное время — O(1).

На заметку

О сложности основных операций для данного типа можно узнать из статьи «Сложность операций со словарями».

Dictionary (Словари)

Словарь (неупорядоченные коллекции из разных объектов с доступом по ключу) создаётся при помощи фигурных скобок, внутри которых указываются пары «ключ-значение» через запятые. Также можно создать пустой словарь и позже добавлять пары. В Python словарь определён в классе dict. Иногда используют термин ассоциативные массивы или хеш-таблицы.

 catDictionary = emptyDictionary = <> 

Другие варианты создания словарей.

С помощью функции dict():

 dictionary = dict(short='dict', long='dictionary') print(dictionary) # numberDict = dict([(1, 3), (2, 9)]) print(numberDict) #

С помощью метода fromkeys():

 noneDictionary = dict.fromkeys(['a', 'b']) print(noneDictionary) # fullDictionary = dict.fromkeys(['a', 'b'], 9) print(fullDictionary) #

И ключи и значения в одном словаре могут быть разных типов (строки, числа).

Ключи и значения могут выводиться в различном порядке, потому что словари, в отличие от списков, не упорядочены (не ранжированы). В словаре нет первого элемента, потому что нет какого-нибудь порядка расположения элементов.

Число пар в словаре можно получить через len.

 print(len(catDictionary)) # 3 

Доступ к значению можно получить через ключ, указанный в квадратных скобках. Если указать неправильный ключ, то вернётся ошибка.

 print(catDictionary["key3"]) # Vaska 

Также можно через метод get().

 val = catDictionary.get("key2") print(val) # Murzik 

При не существующем ключе можно вернуть собственное сообщение.

 val = catDictionary.get("key5", "That key is not found") print(val) 

Проверить, есть ли проверяемый ключ в словаре можно через оператор in. В успешном случае возвращается True или 1, в противном случае возвращается False или 0.

 print("key4" in catDictionary) # 0 print("key1" in catDictionary) # True 

Получить все ключи можно через keys(). Метод возвращает значение типа dict_keys.

 keys = catDictionary.keys() print(list(keys)) 

Получить все значения ключей можно через values(). Метод возвращает значение типа dict_values.

 values = catDictionary.values() print(list(values)) # ['Murzik', 'Vaska', 'Barsik'] 

Получить все ключи со значениями можно через items().

 items = catDictionary.items() print(items) # dict_items([('key2', 'Murzik'), ('key3', 'Vaska'), ('key1', 'Barsik')]) 

Чтобы обновить значение в словаре, нужно указать ключ и новое значение.

 catDictionary["key1"] = "Ryzhik" 

По такому же принципу можно добавить новый ключ со значением.

 catDictionary["key4"] = "Murka" 

Удалить элемент (ключ-значение) можно через оператор del. Также можно удалить весь словарь.

 del catDictionary["key4"] del catDictionary 

Если мы не хотим удалять сам словарь, а только очистить его от элементов, то воспользуемся методом clear().

 catDictionary.clear() print(catDictionary) # <> 

Выражение favorites1 == favorites2 истинно потому, что словари не упорядочены и считаются эквивалентными, если состоят из одинаковых пар ключ-значение.

Списки с одинаковыми значениями элементов, но разным порядком их следования, равны не будут.

 favorites1 = favorites2 = favorites1 == favorites2 # True 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *