Меню

Python вывести словарь с отступами

№12 Словарь (dict) / Уроки по Python для начинающих

Словарь — неупорядоченная последовательность, гибким к изменениям и индексированным. В Python словари пишутся в фигурных скобках, и состоят из ключей и значений.
Создадим и выведем словарь:

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

Вы можете получить доступ к элементам словаря ссылаясь на его ключевое название.
Получим значение по ключу “model” :

Существует так же метод под названием get() который даст вам тот же результат.

Изменить значение

Вы можете поменять значение указанного элемента ссылаясь на ключевое название.
Поменяем “year” на “2018”:

Цикл for по словарю

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

Выведем значения словаря, один за одним:

Вы так же можете использовать функцию values() для возврата значений словаря:

Пройдем по ключам и значениям, используя функцию items() :

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

Для того, чтобы определить сколько элементов есть в словаре, используйте метод len() .

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

Добавление элементов в словарь выполняется с помощью нового ключа:

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

Существует несколько методов удаления элементов из словаря.
Метод pop() удаляет элемент по ключу и возвращает его:

Метод popitem() удаляет последний элемент:

Ключевое слово del удаляет элемент по ключу:

Ключевое слово del может так же удалить полностью весь словарь:

Ключевое слово clear() очищает словарь:

Конструктор dict()

Вы так же можете использовать конструктор dict() для создания нового словаря.

Методы словаря

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

Источник

Как распечатать элементы словаря в Python

Чтобы напечатать элементы словаря пары ключ:значение, вы можете использовать dict.items(), dict.keys() или dict.values.(), функцию print().

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

Распечатать словарь, как одну строку

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

В следующей программе мы инициализируем словарь и распечатаем его целиком.

Как распечатать пары ключ:значение?

Чтобы распечатать пары ключ:значение в словаре, используйте цикл for и оператор печати для их печати. dict.items() возвращает итератор для пар ключ:значение во время каждой итерации.

В следующей программе мы инициализируем словарь и распечатаем пары ключ:значение словаря с помощью цикла For Loop.

Печать ключей словаря

Чтобы напечатать ключи словаря, используйте цикл for для обхода ключей с помощью итератора dict.keys() и вызова функции print().

В следующей программе мы инициализируем словарь и распечатаем ключи словаря с помощью For Loop.

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

Чтобы распечатать значения словаря, используйте цикл for для просмотра значений словаря с помощью итератора dict.values() и вызова функции print().

В следующей программе мы инициализируем словарь и распечатаем значения словаря с помощью For Loop.

Источник

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

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

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

Для создания словаря в Python необходимо передать последовательность элементов внутри фигурных скобок <> , разделив их запятыми ( , ). Каждый элемент имеет ключ и значение, выраженное парой «ключ: значение».

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

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

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

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

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

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

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

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

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

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

Чтобы получить доступ к элементам словаря, нужно передать ключ в квадратных скобках [] . Например:

Был создан словарь dict_sample . Затем была создана переменная x . Ее значение — это значение ключа [«model»] из словаря.

Вот другой пример:

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

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

Читайте также:  Mysql вывести все схемы

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

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

У нового элемента ключ «Capacity» и значение — «180CC» . Он был добавлен в качестве первого элемента словаря.

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

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

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

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

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

В этом примере название ключа — «Value» , а все что после знака = — его значения в формате множества ( Set ).

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

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

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

В этом примере видно, что было обновлено значение ключа «year» с 2012 на 2014 .

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

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

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

Вызывается ключевое слово del , а следом за ним — название словаря. В квадратных скобках следом за словарем идет ключ элемента, который требуется удалить. В этом примере это «year» . Запись «year» удаляется из словаря.

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

Функция pop() была вызвана добавлением ее к названию словаря. В этом случае будет удалена запись с ключом «year» .

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

Последней записью в словаре была «year» . Она пропала из словаря после вызова функции popitem() .

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

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

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

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

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

Метод len()

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

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

Метод copy()

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

Была создана копия словаря dict_sample . Она присвоена переменной x . Если вывести x в консоль, то в ней будут те же элементы, что и в словаре dict_sample .

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

Метод items()

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

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

Объект, который возвращает items() , можно использовать, чтобы показать изменения в словаре. Вот как это работает.

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

Метод fromkeys()

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

Значение требуемого параметра keys — итерируемые объекты. Оно отвечает за ключи нового словаря. Значение для параметра value указывать необязательно. Оно отвечает за значение по умолчанию для всех ключей. По умолчанию — None .

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

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

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

Используется значение по умолчанию, None .

Метод setdefault()

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

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

В этой функции параметр keyname является обязательным. Он обозначает название ключа, значение которого нужно вернуть. Параметр value необязательный. Если в словаре уже есть ключ, параметр не будет иметь никакого эффекта. Если ключ не существует, тогда значение функции станет значением ключа. Значение по умолчанию — None .

Читайте также:  Php как вывести таблицу с массивами

В словаре нет ключа color . Метод setdefault() вставляет этот ключ вместе со значением «Gray» .

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

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

Метод keys()

Этот метод также возвращает итерируемый объект. Он является списком всех ключей в словаре. Как и метод items() , этот отображает изменения в самом словаре.

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

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

Выводы

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

Источник

Как напечатать словарь построчно в Python?

используя этот for loop

он печатает следующее:

но я хочу, чтобы программа печатала так:

Я только начал изучать словари, поэтому я не уверен, как это сделать.

9 ответов:

более обобщенное решение, которое обрабатывает произвольно-глубоко вложенные дикты и списки, было бы:

это производит выход:

я столкнулся с подобной необходимостью и разработать более надежную функцию в качестве упражнения для себя. Я включаю его сюда на случай, если он может быть полезен для другого. В управлении nosetest, я также нашел это полезно, чтобы иметь возможность указать выходной поток в звонок так, что sys.устройство может быть использовано вместо.

используя эту функцию, выход OP выглядит следующим образом:

который я лично нашел более полезным и описательным.

учитывая немного менее тривиальный пример:

запрошенное решение OP дает следующее:

в то время как «расширенная» версия дает это:

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

вы могли бы использовать json модуль для этого. Элемент dumps функция в этом модуле преобразует объект JSON в правильно отформатированную строку, которую затем можно распечатать.

вывод выглядит как

The документация также указывает кучу полезных опций для этого метода.

у вас есть вложенная структура, поэтому вам также нужно отформатировать вложенный словарь:

Как Martijn Pieters упоминалось в одном из комментариев выше PrettyPrint является хорошим инструментом для этой работы:

Источник

Как красиво распечатать вложенные словари?

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

4 в Python? Я попытался хорошенько распечатать с pprint() , но это не сработало:

Я просто хочу отступ ( «\t» ) для каждого вложения, чтобы получить что-то вроде этого:

Как я могу это сделать?

19 ответов

Я не уверен, как именно вы хотите, чтобы форматирование выглядело, но вы могли бы начать с такой функции:

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

Я написал этот простой код для печати общей структуры объекта json в Python.

Результат для следующих данных

Очень компактен и выглядит так:

Я взял ответ sth и немного изменил его в соответствии со своими потребностями во вложенных словарях и списках:

Который затем дает мне вывод, как:

Я просто возвращаюсь к этому вопросу после того, как принял sth и внес небольшую, но очень полезную модификацию. Эта функция печатает все ключи в дереве JSON , а также размер листовых узлов в этом дереве.

Очень хорошо, когда у вас есть большие объекты JSON и вы хотите выяснить, где находится мясо. Пример :

Это скажет вам, что большая часть данных, которые вас интересуют, вероятно, находится внутри JSON_object[‘key1’][‘key2’][‘value2’] , потому что длина этого значения, отформатированного в виде строки, очень велика.

Вот кое-что, что напечатает любой вложенный словарь, отслеживая при этом «родительские» словари.

Это хорошая отправная точка для печати в различных форматах, например, в OP. Все, что вам действительно нужно, это операции с блоками Print . Обратите внимание, что он проверяет, является ли значение OrderedDict (). В зависимости от того, используете ли вы что-то из коллекций типов данных контейнера, вы должны сделать это сортировка по сбоям, поэтому блок elif не видит его как дополнительный словарь из-за его имени. На данный момент пример словаря, как

изменение кода в соответствии с форматом вопроса

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

Это не точно , что запрашивается в OP. Разница в том, что родительский ^ n все еще печатается, вместо того, чтобы отсутствовать и заменяться пробелом. Чтобы перейти к формату OP, вам нужно сделать что-то вроде следующего: итеративно сравнить dicList с lastDict . Вы можете сделать это, создав новый словарь и скопировав в него содержимое dicList, проверив, совпадает ли i в скопированном словаре с i в lastDict, и — если он is — запись пробела в эту позицию i с использованием функции умножения строк.

Читайте также:  Indesit с вертикальной загрузкой как стирать

Sth, я тону, это красиво;)

Другой вариант с yapf :

Я сам относительный новичок в Python, но последние пару недель я работал с вложенными словарями, и это то, что я придумал.

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

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

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

Преимущество этого подхода в том, что отступ в \t раз превышает длину стека:

Недостатком является то, что для проверки каждого ключа необходимо выполнить хеширование до соответствующего под-словаря, хотя это можно легко сделать с помощью понимания списка и простого цикла for :

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

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

РЕДАКТИРОВАТЬ: Если вы не хотите проходить через все это, модуль pprint печатает вложенные словари в хорошем формате.

pout может довольно печатать все, что вы к нему добавляете, например (заимствование data из другого ответа ) :

Приведет к выводу на экран, например:

Или вы можете вернуть форматированную строку вывода вашего объекта:

Его основной сценарий использования предназначен для отладки, поэтому он не задыхается от экземпляров объектов или чего-либо еще и обрабатывает вывод в Unicode, как и следовало ожидать, работает в python 2.7 и 3.

Раскрытие информации . Я являюсь автором и сопровождающим Pout.

Вот функция, которую я написал на основе комментариев. Он работает так же, как json.dumps с отступом, но я использую вкладки вместо места для отступов. В Python 3.2+ вы можете указывать отступ как ‘\ t’ напрямую, но не в 2.7.

Вот что я придумал, работая над классом, который должен был написать словарь в .txt файле:

Теперь, если у нас есть словарь, подобный этому:

Вы можете попробовать YAML через PyYAML. Его выход может быть точно настроен. Я бы предложил начать со следующего:

print yaml.dump(data, allow_unicode=True, default_flow_style=False)

Результат очень читабельный; при необходимости его также можно проанализировать обратно в Python.

Изменить:

Используйте эту функцию:

Назовите это так:

Что касается того, что было сделано, я не вижу симпатичного принтера, который по крайней мере имитирует вывод интерпретатора python с очень простым форматированием, так что вот мой:

Чтобы инициализировать это:

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

По историческим причинам я сохранил предыдущий симпатичный принтер, который был функцией вместо класса, но они оба могут использоваться одинаково, версия класса просто позволяет гораздо больше:

Чтобы использовать это:

По сравнению с другими версиями:

  • Это решение напрямую ищет тип объекта, поэтому вы можете напечатать практически все, не только список или диктовку.
  • Не имеет никакой зависимости.
  • Все помещено в строку, так что вы можете делать с ней все, что захотите.
  • Класс и функция были протестированы и работают с Python 2.7 и 3.4.
  • Вы можете иметь все типы объектов внутри, это их представления, а не их содержимое, которое помещается в результат (поэтому строка имеет кавычки, строка Unicode полностью представлена . ).
  • С версией класса вы можете добавить форматирование для каждого типа объекта или изменить их на уже определенные.
  • ключ может быть любого допустимого типа.
  • Отступы и символы новой строки могут быть изменены для всего, что мы хотели.
  • Dict, List и Tuples довольно напечатаны.

Таким образом, вы можете распечатать его довольно хорошо, например, ваш словарь зовут Ясин

Источник