Python массив ассоциативный: Ассоциативные массивы в Python? — Хабр Q&A
Массивы в Python — Программирование с нуля
В языках программирования, массив — это структура данных, содержащая в себе набор значений, которые называются элементами массива. Размер массива определяется количеством содержащихся в нем элементов.
Как создать массив в Python
В языке программирования Python отсутствует встроенная поддержка массивов. Вместо этого используется тип данных list (список). Он представляет собой обычный набор элементов, доступ к которым можно получить по их индексу, который начинается с нуля:
my_list = ['apple', 'orange', 'banana'] print(my_list[0]) apple print(my_list[2]) banana
Более подробно списки, а так же методы работы с ними, рассмотрены в нашей статье Списки в Python.
Ассоциативные массивы в Python
Ассоциативный массив является очень популярным и удобным способом работы с данными, которые могут быть сгруппированы в один контейнер (переменную).
В языке программирования Python, наиболее подходящим для этого функционалом обладает тип данных dictionary (словарь).
Словарь это набор пар ключ:значение которые заключены в фигурные скобки и разделены запятыми. Доступ к значениям осуществляется по ключу. Именно эта особенность ассоциативных массивов сделала их таким популярным типом данных. Давайте сравним два примера:
my_car = ['Lada', 'Vesta', 2019] my_car2 = { 'brand': 'Lada', 'model': 'Vesta', 'year': 2019 }
В первом случае мы создали список, который конечно подходит для дальнейшей работы программы, мы можем получать доступ к его элементам используя числовые индексы в квадратных скобках.
Во втором случае мы создали словарь, в котором каждый элемент имеет свой ключ. Данные те же, но доступ к ним стал более «информативным»:
print(my_car[0]) Lada print(my_car['brand']) Lada
Согласитесь, во втором случае код будет выглядеть гораздо более читабельным, особенно если в вашей программе используется более одного «массива» и они имеют больше элементов чем в нашем примере. И это не говоря уже о том, что иногда сама структура данных требует сохранения пар «ключ:значение».
Более подробно о типе данных Python dictionary (словарь) вы можете почитать в нашей статье Словари в Python.
Термин «массив» в данной статье использовался исключительно для удобства нахождения этой информации в поиске новичками. Еще раз напомним: вместо массивов в Python используются специальные типы данных list (список) и dictionary (словарь).
Как массивы и списки работают на Python
Массивы и списки являются одними из наиболее полезных структур данных в программировании. Сегодня я расскажу вам основы, а также покажу несколько простых примеров Python массивов.
Чтобы изучить рассматриваемые в этой статье концепции, вам не требуется заранее много знать. Базовые знания парадигмы программирования и Python желательны, но это не обязательно.
Рассматриваемые в этой статье принципы могут быть применены в любом языке программирования. Я буду демонстрировать примеры на Python. Это простой для изучения язык предоставляет превосходную платформу для понимания того, что происходит. В дополнение к этому существует отличный онлайн-интерпретатор Python.
Структура данных — это способ эффективного хранения данных. Легко запутаться, потому что структуры данных не являются типом данных, которые сообщают компилятору (или в случае Python интерпретатору), как их использовать. Структуры данных определяют операции, которые могут выполняться и реализуют конкретные правила и положения.
Возможно, вы слышали о линейных типах данных (элементы последовательны):
- Массив;
- Матрица;
- Таблица поиска.
Аналогичным образом, списки часто содержат правила и методы для регулирования того, как они работают. Типы списков:
- Связный список;
- Двойной связный список;
- Список массивов или динамический массив.
Существует множество различных структур данных. Возможно, вы слышали о бинарных деревьях, графах или хэшах.
Python массивы и списки представляют собой простой набор связанных значений, которые называются элементами. Обычно это любой тип данных, включая объекты или другие списки! При работе с массивами все данные должны быть одинаковыми — нельзя хранить вместе строки и целые числа. Вам почти всегда придется указывать, сколько элементов нужно хранить. Динамические массивы существуют, но проще начать с массивов фиксированной длиной.
Python несколько усложняет ситуацию. Он не всегда придерживается строгих определений структур данных. Большинство объектов в Python обычно являются списками, поэтому создавая массив, вы проделываете больше работы. Вот начальный код:
from array import array numbers = array('i', [2, 4, 6, 8]) print numbers[0]
Первая строка импортирует модуль array, необходимый для работы с массивами. Вторая строка создает новый массив numbers и инициализирует его значениями 2, 4, 6 и 8. Каждому элементу присваивается целочисленное значение, называемое ключом или индексом. Ключи начинаются с нуля, поэтому [0] будет обращаться к первому элементу (2):
Вам наверно интересно, для чего используется «i». Это typecode, который сообщает Python, что массив будет хранить целые числа. Обычно подобные вещи в Python не нужны. Причина этого проста. Массивы в Python основаны на базовых C-массивах операционной системы. Это означает, что они быстрые и стабильные, но не всегда могут придерживаться синтаксиса Python.
Нельзя хранить элементы разных типов в этих массивах. Допустим, вы захотели сохранить строку «makeuseof.com»:
numbers = array('i', [2, 4, 6, "makeuseof.com"])
Это вызовет исключение при работе с Python массивом строк:
Вот как можно вывести все элементы:
Этот метод доступа к элементам массива работает хорошо, и идеально подходит для решения задачи. Плохо то, что это — доступ ко всему массиву.
Каждый язык программирования реализует цикл, который идеально подходит для итерации (циклизации) над элементами списка.
Наиболее распространенные циклы while и for. Python делает это еще проще, предоставляя цикл for in:
for number in numbers: print number
Обратите внимание на то, что вам не нужно обращаться к элементам по их ключу. Это лучший способ работы с массивом. Альтернативный способ перебора списка — это цикл for:
for i in range(len(numbers)): print numbers[i]
Этот пример делает то же самое, что и предыдущий. Но в нем нужно указать количество элементов в массиве (len (cars)), а также передать i в качестве ключа. Это почти тот же код, который выполняется в цикле for in. Этот способ обеспечивает большую гибкость и выполняется немного быстрее (хотя цикла for in в большинстве случаев более чем достаточно).
Теперь, когда вы знаете, как работают Python двумерные массивы, давайте посмотрим на список. Иногда он может сбивать с толку, поскольку люди используют различные взаимозаменяемые термины, но списки — это массивы … отчасти.
Список — это особый тип массива. Различие состоит в том, что списки могут содержать смешанные типы данных. Помните, массивы должны содержать элементы одного типа. Списки в Python просты:
cars = ['Ford', 'Austin', 'Lancia']
Этот синтаксис объявляет список под названием cars. В квадратных скобках объявляется каждый элемент списка. Каждый элемент является строкой, поэтому их объявляют внутри кавычек. Python знает, что это объект, поэтому оператор print выводит содержимое списка:
Как и в случае с массивом, можно осуществлять Python сортировку массива с помощью циклов:
for car in cars: print car
Настоящий фокус со списками — их смешанный тип. Добавьте дополнительные данные:
cars = ['Ford', 'Austin', 'Lancia', 1, 0.56]
Это даже не вызвало исключения:
Также просто добавить новые элементы в список (что невозможно с массивами):
cars = ['Ford', 'Austin'] print cars cars.append('Lancia') print cars
Можно объединить два списка в один:
cars = ['Ford', 'Austin'] print cars other_cars = ['Lotus', 'Lancia'] cars.extend(other_cars) print cars
Также легко удалить элементы Python ассоциативного массива, используя синтаксис remove:
cars = ['Ford', 'Austin', 'Lotus', 'Lancia'] print cars cars.remove('Ford') print cars
Вы узнали что-нибудь новое? Поделитесь с нами своими мыслями в комментариях!
Данная публикация представляет собой перевод статьи «How Arrays and Lists Work in Python» , подготовленной дружной командой проекта Интернет-технологии.ру
телеграм канал. Подпишись, будет полезно!
Урок по применению списков вместо массивов в Python ~ PythonRu
Предыдущий урок: Lambda-фунция
Примечание: Python не имеет встроенной поддержки массивов, но вместо этого можно использовать списки (list) Python.
Массивы используются для хранения нескольких значений в одной переменной:
cars = ["Ford", "Volvo", "BMW"]
Что такое массив?
Массив — это специальная переменная, которая может содержать более чем одно значение.
Если у вас есть список предметов (например, список марок авто), то хранение автомобилей в отдельных переменных может выглядеть так:
car1 = "Ford";
car2 = "Volvo";
car3 = "BMW";
Однако, что, если вы хотите проскочить через все машины и найти конкретную? А что, если у вас было бы не 3 автомобиля а 300?
Решение представляет собой массив!
Массив может содержать много значений под одним именем, и вы так же можете получить доступ к значениям по индексу.
Доступ к элементам массива
Вы ссылаетесь на элемент массива, ссылаясь на индекс.
Получим значение первого элемента массива:
x = cars[0]
Изменим значение первого элемента массива:
cars[0] = "Toyota"
Длина массива
Используйте метод len()
чтобы вернуть длину массива (число элементов массива).
Выведем число элементов в массиве cars
:
x = len(cars)
Подписывайтесь на телеграм каналы
Примечание: Длина массива всегда больше, чем индекс последнего элемента.
Циклы элементов массива
Вы можете использовать цикл for
для прохода по всем элементам массива.
Выведем каждый элемент из цикла cars
:
for x in cars:
print(x)
Вывод:
Ford
Volvo
BMW
Добавление элементов массива
Вы можете использовать метод append()
для добавления элементов в массив.
Добавим еще один элемент в массив cars
:
cars.append("Honda")
Удаление элементов массива
Используйте метод pop()
для того, чтобы удалить элементы из массива.
Удалим второй элемент из массива cars
:
cars.pop(1)
Так же вы можете использовать метод remove()
для того, чтобы убрать элемент массива.
Удалим элемент со значением “Volvo”:
cars.remove("Volvo")
Примечание: Метод remove()
удаляет только первое вхождение указанного значения.
Методы массива
В Python есть набор встроенных методов, которые вы можете использовать при работе с lists/arrays.
Метод | Значение |
---|---|
append() | Добавляет элементы в конец списка |
clear() | Удаляет все элементы в списке |
copy() | Возвращает копию списка |
count() | Возвращает число элементов с определенным значением |
extend() | Добавляет элементы списка в конец текущего списка |
index() | Возвращает индекс первого элемента с определенным значением |
insert() | Добавляет элемент в определенную позицию |
pop() | Удаляет элемент по индексу |
remove() | Убирает элементы по значению |
reverse() | Разворачивает порядок в списке |
sort() | Сортирует список |
Примечание: В Python нет встроенной поддержки для массивов, вместо этого можно использовать Python List.
Далее: Классы и объекты Python
Интервально-ассоциативный массив / Хабр
Замечательная вещь — ассоциативный массив. Самые разные задачи решаются с его помощью легко, приятно и быстро. А как быть когда значение должно принадлежать не одному ключу, а быть «размазанным» на некоторый интервал?
Представьте, что вам нужно сделать программу для составления расписания дежурства менеджеров интернет-магазина. Работа с ним должна была максимально простой, примерно так:
# легко назначить
>>> timetable['08:00' : '12:00'] = 'Иванов'
>>> timetable['12:00' : '16:00'] = 'Петров'# как узнать кто дежурил в 13:51 ?
>>> print timetable['13:51']
Петров# легко просмотреть поэлементо полный список
>>> for interval, person in timetable.items(): print interval, person
('08:00', '12:00') Иванов
('12:00', '16:00') Петров# ...или одной строкой
>>> print timetable
{['08:00', '12:00'] => 'Иванов', ['12:00', '16:00'] => 'Петров'}
# удаление как по частям
>>> del timetable['15:00' : '16:00']
>>> print timetable
{['08:00', '12:00'] => 'Иванов', ['12:00', '15:00'] => 'Петров'}# ...так и целиком
>>> del timetable['12:00' : '16:00']
>>> print timetable
{['08:00', '12:00'] => 'Иванов'}# перекрывание ключей должно обрабатываться корректно
>>> timetable['11:00' : '15:00'] = 'Сидоров'
>>> print timetable
{['08:00', '11:00'] => 'Иванов', ['11:00', '15:00'] => 'Сидоров'}# соседние ключи с одинаковыми значениями должны склеиваться автоматически,
# например, если вы назначили Сидорову подежурить так же с 15 до 17,
# то наврядли это должно быть две смены подряд, скорее одна более длинная
>>> timetable['15:00' : '17:00'] = 'Сидоров'
>>> print timetable
{['08:00', '11:00'] => 'Иванов', ['11:00', '17:00'] => 'Сидоров'}# добавим пару записей
>>> timetable['17:00' : '20:00'] = 'Петров'
>>> timetable['21:00' : '23:00'] = 'Сидоров'
>>> timetable
{['08:00', '11:00'] => 'Иванов', ['11:00', '17:00'] => 'Сидоров',
['17:00', '20:00'] => 'Петров', ['21:00', '23:00'] => 'Сидоров'}# часто возникает задача урезать расписание, оставив из нескольких идущих подряд элементов,
# только последние. Например, нужно узнать кто закрывал рабочий день.
>>> timetable.shrink()
>>> print timetable
{['08:00', '20:00'] => 'Петров', ['21:00', '23:00'] => 'Сидоров'}# этот же метод можно использовать для проверки
# полностью ли ваше расписание охватывает рабочий день.
Примерно такая задача встала передо мной в проекте. Гугление дало один интересный рецепт, в котором отсутствовало несколько важных фич. После доработки напильником все встало на свои места.
Кому нужно — смело берите. Любые комметарии, вопросы, багрепорты приветствуются. Если есть идеи по развитию — пишите!
UPD: К сожалению, после Visual Code Highlighter-a и Хабрапарсера, форматирование кода основательно испортилось, поэтому я его убираю отсюда и выкладываю на гугль: code.google.com/p/intervalmap/source/browse/trunk/intervalmap.py
NumPy в Python. Часть 1 / Habr
Предисловие переводчика
Доброго времени суток, Хабр. Запускаю цикл статей, которые являются переводом небольшого мана по numpy, ссылочка. Приятного чтения.
Введение
NumPy это open-source модуль для python, который предоставляет общие математические и числовые операции в виде пре-скомпилированных, быстрых функций. Они объединяются в высокоуровневые пакеты. Они обеспечивают функционал, который можно сравнить с функционалом MatLab. NumPy (Numeric Python) предоставляет базовые методы для манипуляции с большими массивами и матрицами. SciPy (Scientific Python) расширяет функционал numpy огромной коллекцией полезных алгоритмов, таких как минимизация, преобразование Фурье, регрессия, и другие прикладные математические техники.
Установка
Если у вас есть Python(x, y) (Примечание переводчика: Python(x, y), это дистрибутив свободного научного и инженерного программного обеспечения для численных расчётов, анализа и визуализации данных на основе языка программирования Python и большого числа модулей (библиотек)) на платформе Windows, то вы готовы начинать. Если же нет, то после установки python, вам нужно установить пакеты самостоятельно, сначала NumPy потом SciPy. Установка доступна здесь. Следуйте установке на странице, там всё предельно понятно.
Немного дополнительной информации
Сообщество NumPy и SciPy поддерживает онлайн руководство, включающие гайды и туториалы, тут: docs.scipy.org/doc.
Импорт модуля numpy
Есть несколько путей импорта. Стандартный метод это — использовать простое выражение:
>>> import numpy
Тем не менее, для большого количества вызовов функций numpy, становиться утомительно писать numpy.X снова и снова. Вместо этого намного легче сделать это так:
>>> import numpy as np
Это выражение позволяет нам получать доступ к numpy объектам используя np.X вместо numpy.X. Также можно импортировать numpy прямо в используемое пространство имен, чтобы вообще не использовать функции через точку, а вызывать их напрямую:
>>> from numpy import *
Однако, этот вариант не приветствуется в программировании на python, так как убирает некоторые полезные структуры, которые модуль предоставляет. До конца этого туториала мы будем использовать второй вариант импорта (import numpy as np).
Массивы
Главной особенностью numpy является объект array. Массивы схожи со списками в python, исключая тот факт, что элементы массива должны иметь одинаковый тип данных, как float и int. С массивами можно проводить числовые операции с большим объемом информации в разы быстрее и, главное, намного эффективнее чем со списками.
Создание массива из списка:
a = np.array([1, 4, 5, 8], float)
>>> a
array([ 1., 4., 5., 8.])
>>> type(a)
<class 'numpy.ndarray'>
Здесь функция array принимает два аргумента: список для конвертации в массив и тип для каждого элемента. Ко всем элементам можно получить доступ и манипулировать ими также, как вы бы это делали с обычными списками:
>>> a[:2]
array([ 1., 4.])
>>> a[3]
8.0
>>> a[0] = 5.
>>> a
array([ 5., 4., 5., 8.])
Массивы могут быть и многомерными. В отличии от списков можно задавать команды в скобках. Вот пример двумерного массива (матрица):
>>> a = np.array([[1, 2, 3], [4, 5, 6]], float)
>>> a
array([[ 1., 2., 3.],
[ 4., 5., 6.]])
>>> a[0,0]
1.0
>>> a[0,1]
2.0
Array slicing работает с многомерными массивами аналогично, как и с одномерными, применяя каждый срез, как фильтр для установленного измерения. Используйте «:» в измерении для указывания использования всех элементов этого измерения:
>>> a = np.array([[1, 2, 3], [4, 5, 6]], float)
>>> a[1,:]
array([ 4., 5., 6.])
>>> a[:,2]
array([ 3., 6.])
>>> a[-1:, -2:]
array([[ 5., 6.]])
Метод shape возвращает количество строк и столбцов в матрице:
>>> a.shape
(2, 3)
Метод dtype возвращает тип переменных, хранящихся в массиве:
>>> a.dtype
dtype('float64')
Тут float64, это числовой тип данных в numpy, который используется для хранения вещественных чисел двойной точности. Так как же float в Python.
Метод len возвращает длину первого измерения (оси):
a = np.array([[1, 2, 3], [4, 5, 6]], float)
>>> len(a)
2
Метод in используется для проверки на наличие элемента в массиве:
>>> a = np.array([[1, 2, 3], [4, 5, 6]], float)
>>> 2 in a
True
>>> 0 in a
False
Массивы можно переформировать при помощи метода, который задает новый многомерный массив. Следуя следующему примеру, мы переформатируем одномерный массив из десяти элементов во двумерный массив, состоящий из пяти строк и двух столбцов:
>>> a = np.array(range(10), float)
>>> a
array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
>>> a = a.reshape((5, 2))
>>> a
array([[ 0., 1.],
[ 2., 3.],
[ 4., 5.],
[ 6., 7.],
[ 8., 9.]])
>>> a.shape
(5, 2)
Обратите внимание, метод reshape создает новый массив, а не модифицирует оригинальный.
Имейте ввиду, связывание имен в python работает и с массивами. Метод copy используется для создания копии существующего массива в памяти:
>>> a = np.array([1, 2, 3], float)
>>> b = a
>>> c = a.copy()
>>> a[0] = 0
>>> a
array([0., 2., 3.])
>>> b
array([0., 2., 3.])
>>> c
array([1., 2., 3.])
Списки можно тоже создавать с массивов:
>>> a = np.array([1, 2, 3], float)
>>> a.tolist()
[1.0, 2.0, 3.0]
>>> list(a)
[1.0, 2.0, 3.0]
Можно также переконвертировать массив в бинарную строку (то есть, не human-readable форму). Используйте метод tostring для этого. Метод fromstring работает в для обратного преобразования. Эти операции иногда полезны для сохранения большого количества данных в файлах, которые могут быть считаны в будущем.
>>> a = array([1, 2, 3], float)
>>> s = a.tostring()
>>> s
'\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x08@'
>>> np.fromstring(s)
array([ 1., 2., 3.])
Заполнение массива одинаковым значением.
>>> a = array([1, 2, 3], float)
>>> a
array([ 1., 2., 3.])
>>> a.fill(0)
>>> a
array([ 0., 0., 0.])
Транспонирование массивов также возможно, при этом создается новый массив:
>>> a = np.array(range(6), float).reshape((2, 3))
>>> a
array([[ 0., 1., 2.],
[ 3., 4., 5.]])
>>> a.transpose()
array([[ 0., 3.],
[ 1., 4.],
[ 2., 5.]])
Многомерный массив можно переконвертировать в одномерный при помощи метода flatten:
>>> a = np.array([[1, 2, 3], [4, 5, 6]], float)
>>> a
array([[ 1., 2., 3.],
[ 4., 5., 6.]])
>>> a.flatten()
array([ 1., 2., 3., 4., 5., 6.])
Два или больше массивов можно сконкатенировать при помощи метода concatenate:
>>> a = np.array([1,2], float)
>>> b = np.array([3,4,5,6], float)
>>> c = np.array([7,8,9], float)
>>> np.concatenate((a, b, c))
array([1., 2., 3., 4., 5., 6., 7., 8., 9.])
Если массив не одномерный, можно задать ось, по которой будет происходить соединение. По умолчанию (не задавая значения оси), соединение будет происходить по первому измерению:
>>> a = np.array([[1, 2], [3, 4]], float)
>>> b = np.array([[5, 6], [7,8]], float)
>>> np.concatenate((a,b))
array([[ 1., 2.],
[ 3., 4.],
[ 5., 6.],
[ 7., 8.]])
>>> np.concatenate((a,b), axis=0)
array([[ 1., 2.],
[ 3., 4.],
[ 5., 6.],
[ 7., 8.]])
>>>
np.concatenate((a,b), axis=1)
array([[ 1., 2., 5., 6.],
[ 3., 4., 7., 8.]])
В заключении, размерность массива может быть увеличена при использовании константы newaxis в квадратных скобках:
>>> a = np.array([1, 2, 3], float)
>>> a
array([1., 2., 3.])
>>> a[:,np.newaxis]
array([[ 1.],
[ 2.],
[ 3.]])
>>> a[:,np.newaxis].shape
(3,1)
>>> b[np.newaxis,:]
array([[ 1., 2., 3.]])
>>> b[np.newaxis,:].shape
(1,3)
Заметьте, тут каждый массив двумерный; созданный при помощи newaxis имеет размерность один. Метод newaxis подходит для удобного создания надлежаще-мерных массивов в векторной и матричной математике.
На этом у нас конец первой части перевода. Спасибо за внимание.
Как реализовать ассоциативный массив (не словарь) в Python? — python
Я пытаюсь распечатать словарь в Python:
Dictionary = {"Forename":"Paul","Surname":"Dinh"}
for Key,Value in Dictionary.iteritems():
print Key,"=",Value
Хотя элемент «Forename» указан первым, но словари в Python, похоже , отсортированы по значениям, поэтому результат выглядит так:
Surname = Dinh
Forename = Paul
Как распечатать их с тем же порядком в коде или порядке, когда элементы добавляются в (не сортируются по значениям или по ключам)?
python
sorting
dictionary
associative-array
Поделиться
Источник
jondinham
29 февраля 2012 в 08:44
6 Ответов
16
Во-первых, словари вообще не сортируются ни по ключу, ни по значению.
И основываясь на вашем описании. Вам на самом деле нужен модуль collections.OrderedDict
from collections import OrderedDict
my_dict = OrderedDict([("Forename", "Paul"), ("Surname", "Dinh")])
for key, value in my_dict.iteritems():
print '%s = %s' % (key, value)
Обратите внимание, что вам нужно создать экземпляр OrderedDict
из списка кортежей, а не из другого экземпляра dict, так как экземпляр dict перетасует порядок элементов до того, как будет создан экземпляр OrderedDict.
Поделиться
lig
29 февраля 2012 в 08:53
15
Вы можете использовать список кортежей (или список списков). Подобный этому:
Arr= [("Forename","Paul"),("Surname","Dinh")]
for Key,Value in Arr:
print Key,"=",Value
Forename = Paul
Surname = Dinh
вы можете сделать словарь из этого с помощью:
Dictionary=dict(Arr)
А правильно рассортированные ключи вот такие:
keys = [k for k,v in Arr]
После этого:
for k in keys: print k,Dictionary[k]
но я согласен с комментариями на ваш вопрос: не было бы легко отсортировать ключи в нужном порядке при циклировании вместо этого?
EDIT: (спасибо Рик Поджи), OrderedDict делает это для вас:
od=collections.OrderedDict(Arr)
for k in od: print k,od[k]
Поделиться
Johan Lundberg
29 февраля 2012 в 08:48
6
Вы можете использовать collections.OrderedDict
. Он доступен в python2.7 и python3.2+.
Поделиться
strcat
29 февраля 2012 в 08:53
4
Это может лучше удовлетворить ваши потребности:
Dictionary = {"Forename":"Paul","Surname":"Dinh"}
KeyList = ["Forename", "Surname"]
for Key in KeyList:
print Key,"=",Dictionary[Key]
Поделиться
Felix Yan
29 февраля 2012 в 08:51
3
«но словари в Python сортируются по значениям» может быть, я ошибаюсь здесь, но что за игру вы придумали? Словари не сортируются ни по чему.
У вас будет два решения: либо сохранить список ключей дополнительно к справочнику, либо использовать другую структуру данных, например массив или массивы.
Поделиться
Bogdan
29 февраля 2012 в 08:51
3
Интересно, если это упорядоченный дикт , который вы хотите:
>>> k = "one two three four five".strip().split()
>>> v = "a b c d e".strip().split()
>>> k
['one', 'two', 'three', 'four', 'five']
>>> v
['a', 'b', 'c', 'd', 'e']
>>> dx = dict(zip(k, v))
>>> dx
{'four': 'd', 'three': 'c', 'five': 'e', 'two': 'b', 'one': 'a'}
>>> for itm in dx:
print(itm)
four
three
five
two
one
>>> # instantiate this data structure from OrderedDict class in the Collections module
>>> from Collections import OrderedDict
>>> dx = OrderedDict(zip(k, v))
>>> for itm in dx:
print(itm)
one
two
three
four
five
Словарь, созданный с помощью OrderdDict, сохраняет исходный порядок вставки .
Другими словами, такой словарь перебирает пары ключ/значение в соответствии с порядком, в котором они были вставлены.
Так, например, когда вы удаляете ключ и затем снова добавляете тот же ключ, порядок итераций меняется:
>>> del dx['two']
>>> for itm in dx:
print(itm)
one
three
four
five
>>> dx['two'] = 'b'
>>> for itm in dx:
print(itm)
one
three
four
five
two
Поделиться
doug
29 февраля 2012 в 08:59
Похожие вопросы:
В Python как инициализировать / повторно инициализировать ассоциативный массив (словарь)?
В программе Python, которую я пишу, я буду использовать ассоциативный массив (словарь), который будет иметь значения года в качестве ключей и списки 12 ежемесячных наблюдений в качестве значений….
Как добавить значения в ассоциативный массив?
Если я хочу добавить значения в массив в цикле while, я мог бы сделать $arr[] = some . Но как я могу это сделать, если у меня есть ассоциативный массив, например: while($result =…
Двумерный ассоциативный массив в Python
У меня есть set() с такими терминами, как ‘A’ ‘B’ ‘C’. Мне нужен ассоциативный массив 2-d, чтобы я мог выполнить операцию, подобную d[‘A’][‘B’] += 1 . Что это за питонский способ делать,я думал,…
Как преобразовать ассоциативный массив в python?
Я действительно Новичок в python и не могу найти никакой информации об этом. У меня есть ассоциативный массив item , item[‘id’] = 0 item[‘title’] = ‘python’ Я хочу проверить содержимое элемента, но…
Используя SignalR, как отправить словарь (ассоциативный массив) в Javascript?
словарь не сериализуем, и поэтому не может быть отправлен моим клиентам JavaScript код через SignalR как Javascript (псевдо) ассоциативный массив… в .net мой сложный тип-это: public class MyClass…
Ассоциативный массив со смешанными (числовыми и строковыми) индексами?
Как реализовать динамический ассоциативный массив, который может принимать любое количество смешанных индексов (целых чисел, строк или обоих)? Я стремлюсь имитировать структуры, предоставляя,…
Как определить, имеет ли ассоциативный массив ключ?
В ActionScript 3 Есть ли какой-либо удобный способ определить, имеет ли ассоциативный массив (словарь) определенный ключ? Мне нужно выполнить дополнительную логику, если ключ отсутствует. Я мог бы…
Ассоциативный массив против многомерного массива, VBA
Я чувствую, что мне не хватает какого-то элементарного понимания… надеюсь, что это не считается слишком широким или субъективным, так как я не уверен, на какой сайт Stack Exchange размещать…
Как преобразовать ассоциативный массив в key:value?
Мне нужно преобразовать ассоциативный массив, чтобы поместить их в Json, но я не могу понять, как это сделать. Метод to!string добавить ненужные косые черты. int[string] name; name[Python] = 5; Json…
Запомните, как создать ассоциативный массив внутри массива фиксированной длины?
UPDATE: ON HOLD, Я ПРОСТО ПОДУМАЛ О ТОМ, ЧТО НУЖНО ПОПРОБОВАТЬ. ПРОСТИ ЗА МОЮ ГЛУПОСТЬ пердеть мозгом Я застрял, пытаясь понять, как реализовать ассоциативный массив (строки как ключи, двойники как…
словарей Python с Python
- RhinoPython
- Основы
Автор: Дейл Фугье (последнее изменение: 5 декабря 2018 г.)
В этом руководстве обсуждается использование объекта Python Dictionary.
Обзор
Одной из приятных особенностей языков сценариев, таких как Python, является то, что называется ассоциативным массивом.Ассоциативный массив отличается от «обычного» массива в одном главном отношении: вместо того, чтобы индексироваться численно (то есть 0, 1, 2, 3,…), он индексируется ключом или словом, похожим на английский. Python имеет нечто очень похожее на ассоциативный массив в объекте Dictionary. Объект Python Dictionary предоставляет средство индексации ключ: значение. Обратите внимание, что словари неупорядочены — поскольку значения в словаре индексируются ключами, они не хранятся в каком-либо определенном порядке, в отличие от списка, где каждый элемент может быть расположен по его позиции в списке.
Объект Dictionary используется для хранения набора значений данных в виде пар (ключ, элемент). Словарь иногда называют ассоциативным массивом, потому что он связывает ключ с элементом. Ключи ведут себя аналогично индексам в массиве, за исключением того, что индексы массива являются числовыми, а ключи — произвольными строками. Каждый ключ в одном объекте Dictionary должен быть уникальным.
Словари используются, когда некоторые элементы необходимо сохранить и восстановить по имени. Например, словарь может содержать все переменные среды, определенные системой, или все значения, связанные с ключом реестра.Хотя это может быть намного быстрее, чем повторение списка в поисках совпадения, словарь может хранить только один элемент для каждого значения ключа. То есть все ключи словаря должны быть уникальными.
Создание словарей
Чтобы создать пустой словарь, используйте фигурные скобки {}
room_empty = {}
Чтобы создать экземпляр объекта словаря с заполненными парами ключ: элемент, используйте один из следующих методов.
Словарь room_num создается и заполняется каждой парой ключ: значение, а не как пустой словарь.Ключ
представляет собой строку или число, в приведенном ниже примере это имя человека, за которым следует двоеточие :
в качестве разделителя от связанного значения, которое может быть любым типом данных, в данном случае целым числом. Запятые ,
разделяют разные пары ключ: значение в словаре:
room_num = {'john': 425, 'tom': 212, 'sally': 325}
Этот словарь создается из списка кортежей с использованием ключевого слова dict
:
room_num1 = dict ([('john', 425), ('tom', 212), ('sally', 325)])
Ключевое слово dict
может использоваться и другими способами для создания словарей.
Добавление значений
Чтобы добавить значение в Словарь, укажите новый ключ и установите значение. Ниже код создает словарь room_num с двумя парами ключ: значение для Джона и Лиз, а затем добавляет третью для Исаака:
room_num = {'Джон': 425, 'Лиз': 212}
room_num ['Исаак'] = 345
печать room_num
Нет ограничений на количество значений, которые могут быть добавлены в словарь (в пределах физической памяти).
При изменении значения любого из ключей используется тот же синтаксис.Если ключ уже существует в словаре, значение просто обновляется.
Удаление значений
Чтобы удалить значение из словаря, используйте метод del
и укажите ключ для удаления:
room_num = {'Джон': 425, 'Лиз': 212, 'Исаак': 345}
del room_num ['Исаак']
печать room_num
Подсчет значений
Используйте свойство len ()
, чтобы получить количество значений в словаре.
room_num = {'Джон': 425, 'Лиз': 212, 'Исаак': 345}
печать len (room_num)
Получить значения для ключа
Синтаксис в
возвращает True, если указанный ключ существует в словаре.Например, вы можете узнать, включен ли Том в словарь, в данном случае False:
room_num = {'Джон': 425, 'Лиз': 212, 'Исаак': 345}
var1 = 'Том' в room_num
print "Есть ли Том в словаре?" + str (var1)
, или вы можете узнать, является ли Исаак , а не в словаре. Ниже ответ также будет ЛОЖЬ:
room_num = {'Джон': 425, 'Лиз': 212, 'Исаак': 345}
var1 = 'Isaac' отсутствует в room_num
print "Isaac not in room_num?" + str (var1)
Используйте имя переменной и значение ключа в скобках []
, чтобы получить значение, связанное с ключом.
room_num = {'Джон': 425, 'Лиз': 212, 'Исаак': 345}
var1 = room_num ['Исаак']
print "Исаак в номере" + str (var1)
Методы .keys (),
и .values ()
возвращают массив, содержащий все ключи или значения из словаря. Например:
room_num = {'john': 425, 'tom': 212}
печать (room_num.keys ())
печать (room_num.values ())
Цикл по словарю
.
Python: создание ассоциативного массива в цикле
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
.
python — как создать ассоциативный массив в строке запроса
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
Загрузка…
.
ассоциативных массивов awk против python
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
.