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

Получить количество всех ключей в словаре словарей в Python

У меня есть словарь словарей в Python 2.7.

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

Так что в этом примере мне нужно, чтобы количество всех ключей было 6:

Я знаю, что могу перебирать каждый ключ с помощью цикла for, но я ищу более быстрый способ сделать это, так как у меня будет тысячи / миллионы ключей, и это просто неэффективно:

10 ответов

Простота

Если мы знаем, что все значения являются словарями, и не хотим проверять, что любые их значения также являются словарями, то это так просто:

Немного уточни, чтобы на самом деле проверить, что значения являются словарями перед их подсчетом:

И, наконец, если вы хотите сделать произвольную глубину, что-то вроде следующего:

Сделать это быстрее

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

Это дает нам немного больше производительности:

Len (dict) вернет количество ключей в словаре, поэтому, если вы знаете, как оно вложено, и что все значения являются словарями:

Вы можете обернуть это в понимание списка:

Который, вероятно, самый питонический. Вы можете расширить его как:

Но я склонен думать, что это довольно нечитаемо.

Использование функции генератора и yield from Синтаксис новый в Python 3.x. Это будет работать для произвольного вложенного словаря

В Python 2.x вам нужно сделать это:

То, что вы делаете, выполняет итерацию по всем ключам k и значениям v. Значения v являются вашими подчиненными. Вы получаете длину этих словарей и добавляете один, чтобы включить ключ, используемый для индексации субдиректории.

После этого вы суммируете список, чтобы получить полное количество ключей.

Для этого вы можете попробовать использовать DataFrame от pandas:

print len(dict_test) + sum(len(v) for v in dict_test.values())

В качестве более общего способа вы можете использовать функцию рекурсии и выражение генератора:

Тест с принятым ответом, который показывает, что эта функция быстрее, чем принятый ответ:

Источник

Словари в Python 3 — основные методы и функции

В Python есть много встроенных структур данных, используемых для хранения разных типов информации. Словарь ( dict ) — одна из таких структур, которая хранит данные в формате пар ключ-значение. Получить доступ к значениям словаря Python можно с помощью ключей. Этот материал посвящен подробному обсуждению словаря.

Создание словаря

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

Следующие примеры показывают, как создавать словари Python:

Создание пустого словаря:

Cловарь, где ключи являются целыми числами:

Создание словаря с ключами разных типов:

Можно также создать словарь, явно вызвав метод dict() :

Словарь можно создать с помощью последовательности, как в примере внизу:

Словари могут быть вложенными. Это значит, что можно создавать словари внутри существующего словаря. Например:

Чтобы вывести содержимое словаря, можно использовать функцию print() и передать название словаря в качестве аргумента. Например:

Доступ к элементами

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

Добавление элементов

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

Вот другой пример. Для начала нужно создать пустой словарь:

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

Для добавления элементов были отдельно указаны ключи и соответствующие значения. Например:

В этом примере 0 является ключом, а «Apples» — значение.

Можно даже добавить несколько значений для одного ключа. Например:

Помимо добавления новых элементов в словарь, их можно обновлять или изменять. Об этом в следующем разделе.

Обновление элементов

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

Удаление элементов

Удалить элемент из словаря можно несколькими способами. В этом разделе они будут рассмотрены по одному:

Ключевое слово del можно использовать для удаления элемента с конкретным ключом. Например:

Другой способ удалить пару ключ-значение — функция pop() с ключом записи в виде аргумента. Например:

Функция popitem() удаляет последний элемент в словаре. Для нее не нужно указывать конкретный ключ. Примеры:

Что делать, если нужно удалить целый словарь? Это будет сложно и займет много времени, если пользоваться этими методами к каждому ключу. Вместо этого можно использовать ключевое слово del для целого словаря. Например:

Читайте также:  Аспарагинат хрома что это такое

Код вернет ошибку, потому что функция print() пытается получить доступ к словарю, который уже не существует.

В определенных случаях может потребоваться удалить все элементы словаря, оставив его пустым. Этого можно добиться, воспользовавшись функцией clear() :

Код вернет пустой словарь, поскольку все его элементы уже удалены.

Другие распространенные методы словарей

Метод len()

С помощью этого метода можно посчитать количество элементов в словаре. Например:

В этом словаре три записи, поэтому метод вернет 3.

Метод copy()

Этот метод возвращает копию существующего словаря. Например:

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

Метод items()

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

Этот метод нужно вызывать вместе со словарем, как в примере ниже:

Вывод демонстрирует, что когда вы меняете значение в словаре, объекты элементов также обновляются.

Метод fromkeys()

Этот метод возвращает словарь с указанными ключами и значениями. У него следующий синтаксис:

Предположим, что нужно создать словарь с тремя ключами и одинаковым значением. Это можно сделать следующим образом:

В коде вверху определены ключи и одно значение. Метод fromkeys() перебирает ключи и объединяет их со значением для создания заполненного словаря.

Значение для параметра keys является обязательным. В следующем примере показано, что происходит, если параметр values не определен:

Метод setdefault()

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

У метода следующий синтаксис:

Следующий пример показывает, как работает метод, если такой ключ уже есть:

Значение «Allion» не повлияло на словарь, потому что у ключа уже есть значение.

Метод keys()

Для использования метода нужно всего лишь использовать его с именем словаря, как показано ниже:

Часто этот метод используется, чтобы перебрать все ключи в словаре:

Выводы

Это все, что нужно знать о словарях Python. Они хранят информацию в парах «ключ: значение». «Ключ» выступает идентификатором объекта, а «значение» — это определенные данные. В Python много функций, которые могут быть использовать для извлечения и обработки данных. В этой статье были рассмотрены способы создания, изменения и удаления словаря, а также самые распространенные методы для работы с этим типом данных.

Источник

Python | Получить общее количество ключей в словаре

Иногда при работе со словарями Python может возникнуть проблема, при которой необходимо получить точное количество ключей, присутствующих во всех словарях, включая вложенные. Давайте обсудим некоторые способы выполнения этой задачи.

Метод № 1: Использование рекурсии + items() + sum() + len()
Эта задача может быть выполнена с использованием комбинации вышеуказанных функций. В этом мы проверяем, является ли вложенный словарь not, а затем извлекаем его ключи, используя items() а затем суммируем длину его поиска, используя соответствующие функции.

# Python3 код для демонстрации работы
# Получить общее количество ключей в словаре
# Использование рекурсии + items () + sum () + len ()

# Сервисная функция для выполнения задачи

return ( 0 if not isinstance (test_dict, dict )

else len (test_dict) + sum (total_keys(val) for val in test_dict.values()))

# Печать оригинального словаря

print ( «The original dictionary is : » + str (test_dict))

# Использование рекурсии + items () + sum () + len ()
# Получить общее количество ключей в словаре

print ( «Number of keys in dictionary is : » + str (res))

The original dictionary is : <‘gfg’: <‘best’: <‘for’: <‘geeks’: 4>>, ‘is’: 1>>
Number of keys in dictionary is : 5

Метод № 2: Использование yield() + рекурсия
Эта задача также может быть выполнена с использованием комбинации вышеуказанных функций. Это просто еще один способ выполнить эту задачу. Промежуточный результат возвращается, и, следовательно, это более эффективный метод 2.

# Python3 код для демонстрации работы
# Получить общее количество ключей в словаре

from collections import Mapping

# Сервисная функция для выполнения задачи

for key, value in test_dict.items():

if isinstance (value, Mapping):

yield from total_keys(value)

yield len (test_dict)

# Печать оригинального словаря

print ( «The original dictionary is : » + str (test_dict))

# Использование yield () + рекурсия
# Получить общее количество ключей в словаре

res = sum (total_keys(test_dict))

print ( «Number of keys in dictionary is : » + str (res))

The original dictionary is : <‘gfg’: <‘best’: <‘for’: <‘geeks’: 4>>, ‘is’: 1>>
Number of keys in dictionary is : 5

Источник

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

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

Объявление

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

Ключи

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

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

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

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

Значения

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

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

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

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

Определение наличия/отсутствия элемента

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

Количество элементов в словаре

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

Детали реализации CPython

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

Источник

Словари в Python (dict)

У местная аналогия для словаря в языке Python – обычный толковый словарь, где каждому отдельному слову (ключу) соответствует его определение (значение).

Что такое словарь и как он устроен

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

Способ хранения словаря Python в памяти

Рассмотрим сначала то, как выглядит структура отдельно взятого элемента словаря в dict-common.h :

Теперь перейдем к облику самой C-структуры словаря в Python:

Выходит, что, при объявлении нового словаря, в памяти создается объект, состоящий из следующих блоков:

Как и в случае со списками, объект словаря хранит лишь указатели, а не сами значения

Базовая работа со словарями

Объявление словаря

Объявить словарь Python 3 можно несколькими способами. Но сначала рассмотрим наиболее простую ситуацию и создадим пустой словарь:

Теперь объявим и инициализируем словарь из трех элементов через соответствующий литерал и выведем на экран значение третьего элемента:

Помимо литерального объявления, в Python существует возможность объявлять словари при помощи функции dict() :

inventory_dict = dict(right_hand=’sword’, left_hand=’shield’) inventory_dict >

Чуть более хитрые способы создания словарей:

# словарь из десяти элементов со значениями, равными 0 zero_array_dict = dict.fromkeys([‘a0’, ‘b0’, ‘c0’, ‘d0’], 0) zero_array_dict >

key_list = [‘marvel_hero’, ‘dc_hero’] value_list = [‘Spiderman’, ‘Flash’] superhero_dict = dict(zip(key_list, value_list)) superhero_dict >

Обращение к элементу словаря в Python

Извлечь значение элемента словаря можно единственным образом – обратившись к нему по его ключу:

hero_inventory = dict(strong_right_hand=’sword’, strong_left_hand=’shield +3′) what_in_right_hand = hero_inventory[‘strong_right_hand’] # или так: what_in_right_hand = hero_inventory.get(‘strong_right_hand’) print(what_in_right_hand) > sword

В отличие от списков, номеров позиций в словарях нет:

print(any_dict[1]) > Traceback (most recent call last): File «

«, line 1, in print(any_dict[1]) NameError: name ‘any_dict’ is not defined

💭 Подобная ошибка возникнет и в том случае, если вы, по какой-то причине, вдруг решите извлечь значение по несуществующему ключу.

Добавление нового элемента в словарь

Для того чтобы добавить в словарь новые данные достаточно новому ключу этого словаря назначить какое-либо значение. Добавление выглядит так:

superhero_dict = <'dc_hero': 'Flash'>superhero_dict[‘dark_horse_hero’] = ‘Hellboy’ print(superhero_dict) >

Аналогичным образом можно произвести замену существующего значения по его ключу:

superhero_dict[‘dc_hero’] = ‘Batwoman’ print(superhero_dict) >

Удаление элемента из словаря

Для того чтобы удалить запись в словаре воспользуемся оператором del :

# запись “’dark_horse_hero’: ‘Hellboy’” исчезнет. Прости, Красный! del superhero_dict[‘dark_horse_hero’] print(superhero_dict) >

Проверка на наличие ключа в словаре Python

Как отмечалось выше, обращение по несуществующему ключу вызывает ошибку в работе интерпретатора. Поэтому, наличие ключа в словаре следует проверять. За это дело отвечает оператор in :

if ‘marvel_hero’ in superhero_dict: print («Да, такой ключ есть») else: print(«Этот ключ в словаре отсутствует!») > Да, такой ключ есть # запись с ключом ‘dark_horse_hero’ была удалена нами чуть выше if ‘dark_horse_hero’ in superhero_dict: print («Да, такой ключ есть») else: print(«Этот ключ в словаре отсутствует!») > Этот ключ в словаре отсутствует!

💡 Кстати говоря, использование метода get() позволяет корректно обработать ситуацию, когда запрашивается значение по несуществующему ключу. Достаточно в качестве второго параметра написать значение по умолчанию:

my_hero = superhero_dict.get(‘dark_horse_hero’, ‘Этот ключ в словаре отсутствует!’) print(my_hero) > Этот ключ в словаре отсутствует!

Длина словаря в Python

Стоит помнить, что словарь – это лишь набор отображений, а не последовательность, однако количество записей в нём мы все еще можем получить, воспользовавшись функцией len() :

treasure = dict(t1=’gold’, t2=’necklace’) num_of_items = len(treasure) print(num_of_items) > 2

Не самая богатая добыча! 🙄

Сортировка словаря

Так как словарь состоит из пар, то и отсортировать его можно, как по ключам, так и по значениям.

Сортировка по значению А вот – один из вариантов сортировки словаря по значениям:

👉 Здесь стоит учитывать, что, сама по себе, запись sorted(elements.items(), key= lambda x: x[1]) будет возвращать не словарь, а отсортированный список кортежей. Поэтому более правильным вариантом будет:

Перебор словаря в Python

Не является великой тайной и тот факт, что словарь, являющийся, по сути своей, набором пар (т.е. коллекцией), можно всячески итерировать. Один из способов – перебор по ключам:

Объединение словарей

Когда заходит речь об объединении двух словарей, то обязательно следует упомянуть, что для пары сущностей типа «словарь» оператор «+»не определен. Причина этого становится довольно очевидной – стоит лишь вспомнить, что словарь не является последовательностью, а также задуматься над тем, какая именно операция на множестве словарей должна быть реализована этим самым оператором «+». Поэтому как-то так:

dict_1 = <'010120': 55000, '030420': 8500, '170420': 30000>dict_2 = <'050520': 2900, '160520': 16573>print(dict_1 + dict_2) Traceback (most recent call last): File «test.py», line 4, in print(dict_1 + dict_2) TypeError: unsupported operand type(s) for +: ‘dict’ and ‘dict’

💭 Если бы showcase_2 содержал ключи, присутствующие в showcase_1, то значения, ассоциированные с этими ключами, в результирующем словаре были бы взяты именно из showcase_2.

Ограничения

Создавая словарь, вы не должны забывать о некоторых ограничениях, накладываемых, в основном, на его ключи.

Методы словарей в Python

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

# clear() farewell_dict = <'a': 'word', 'b': 3, 'c': 'x', 'd': 1, 'e': 12>farewell_dict.clear() print(farewell_dict) > <> # get() seasons = <'winter': 'cold', 'summer': 'hot', 'autumn': 'cold'>print(seasons.get(‘winter’, ‘Такого ключа в словаре нет’)) > cold seasons_2 = <'spring': 'warm'>print(seasons_2.get(‘nonexistent_key’, ‘Этот ключ отсутствует’)) > Этот ключ отсутствует seasons_3 = <'winter': 'surprice_warm'>print(seasons_3.get(‘nonexistent_key’)) > None # items() pairs_dict = <'41': 41, '42': 42, '43': 43>print(pairs_dict.items()) > dict_items([(’41’, 41), (’42’, 42), (’43’, 43)]) # keys() promo_dict = <'modelA': 100000, 'modelB': 300000, 'modelC': 120000>print(promo_dict.keys()) > dict_keys([‘modelA’, ‘ modelB’, ‘modelC’]) # values() palette = <'color1': 'red', 'color2': 'white', 'color3': 'purple'>print(palette.values()) > dict_values([‘red’, ‘white’, ‘purple’]) # pop() id_dict = <'Alex': 101546, 'Rachel': 116453, 'Johanna': 144172>print(id_dict.pop(‘Alex’)) > 101546 print(id_dict) > <'Rachel': 116453, 'Johanna': 144172># Ключ, само собой, должен присутствовать в словаре. # popitem() another_dict = <'t': 16, 'g': 53, 'y': 112, 'h': 23>print(another_dict.popitem()) > (‘h’, 23) print(another_dict) > <'t': 16, 'g': 53, 'y': 112># update() first_dictionary = <'p': 55, 'o': 44, 'i': 33>second_dictionary = <'l': 22, 'k': 11, 'p': 'changed'>first_dictionary.update(second_dictionary) print(first_dictionary) > <'p': 'changed', 'o': 44, 'j': 33, 'l': 22, 'k': 11># copy() some_dict = <'z': 1, 'x': 3, 'v': 12, 'n': 33>copy_dict = some_dict.copy() print(copy_dict) >

Приведение Python-словарей к другим типам

dict to json

Чтобы сериализовать словарь в json формат, сперва необходимо импортировать сам модуль json:

Теперь можно развлекаться. Существует два схожих метода:

dict to list

medicine_chest = dict(top_part=’potion’, bot_part=’bandage’) medicine_list = [] for key, con in medicine_chest.items(): temp = как узнать количество ключей в словаре python medicine_list.append(temp) print(medicine_list) > [[‘top_part’, ‘potion’], [‘bot_part’, ‘ bandage’]]

dict to string

food_machine = dict(tier_1=’juice’, tier_2=’chocolate’) f_machine_str = str(food_machine) print(f_machine_str) >

Генератор словарей

В Python существует возможность создавать словари с помощью генераторов. Генераторы выполняют цикл, отбирают key:value пары на каждой итерации и заполняют, таким образом, новый словарь.

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

Также генератор удобен, когда нужно инициализировать какой-то имеющийся список ключей:

list_of_keys = [‘q’, ‘w’, ‘e’, ‘r’, ‘t’] generated_dict = print(generated_dict) >

Вложенные словари

Отдельного упоминания заслуживает тот факт, что элемент словаря может принимать в качестве значения другой словарь:

# где-то улыбается один Xzibit nesting_d = <'fk': <'input_lvl_one': <'input_lvl_two': 42>>> print(nesting_d[‘fk’][‘input_lvl_one’][‘input_lvl_two’]) > 42

💭 Число уровней вложенности словарей неограниченно!

Альтернативы словарям

OrderedDict

defaultdict

Counter

Counter – подтип словаря, подсчитывающий и хранящий количество совпадающих неизменяемых элементов последовательности. Однако Counter() обладает и своими небезынтересными методами:

Наверно вы заметили, что словари и списки (о которых, кстати, вы можете почитать в нашей предыдущей статье » Списки в Python «) схожи как, внешне, так и в том, что могут изменять свой размер по необходимости.

Вообще говоря, и списки и словари – это изменяемые объекты, однако операции, провоцирующие изменения для этих типов данных, различны. Различаются они ещё и тем, что элементы словарей сохраняются по ключам, а не по позициям. Так или иначе, оба типа коллекций входят в число наиболее важных и часто применяемых на практике в языке Python.

Источник

Советы мастера