Как добавить несколько значений к ключу в python
Перейти к содержимому

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

  • автор:

Словари Python

Словарем в языке программирования Python называется неупорядоченный набор данных произвольного типа с доступом по ключу. Элементами такой коллекции выступают пары объектов, каждая из которых включает в себя ключ и значение. Для работы со словарями доступны функции, меняющие их содержимое и выполняющие различные операции над ними. Его можно конвертировать в другие типы данных, например, в строку.

Создание

Перед тем как начать работу со словарем, его нужно создать. Сделать это можно базовыми средствами языка, присвоив свободной переменной произвольное количество пар объектов. Элементы необходимо поместить в фигурные скобки, а между ключом и значением должен стоять символ двоеточия. Следующий пример демонстрирует создание словаря под именем a, который включает в себя ключи в виде чисел и значения в виде строк.

a = print(a)

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

a = dict(one = 1, two = 2, three = 3) print(a)

Как и в прошлый раз, функция print отображает содержимое словаря a. В данном случае имеется пары объектов, представленных также в виде чисел и строк.

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

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

a = a[4] = «four» print(a)

В приведенном выше коде применяется оператор присваивания, благодаря чему новая пара (4 : “four”) помещается в конец уже созданной ранее коллекции a.

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

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

a = b = a.update(b) print(a)

Результатом работы метода print станет вывод на экран обновленного содержимого словаря под названием a.

После объединения, новые элементы были автоматически записаны в конец коллекции.

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

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

a = del a[3] print(a)

Так как операция получила ключ 3, в результате ее работы удалилось и значение three.

Получение размера

Функция len позволяет в любой момент определить текущее количество элементов словаря, если передать ей в качестве аргумента имя коллекции. В приведенном ниже примере метод print осуществляет вывод на экран размерность словаря a.

a = print(len(a)) 3

Стоит заметить, что функция len возвращает точное количество пар, но не объектов. В этом случае имеется словарь, который содержит в себе ровно 3 пары.

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

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

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

  • Пар ключ-значение;
  • Перебор всех ключей;
  • Перебор значений.

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

a = for key, value in a.items(): print(key, ":", value) 1 : one 2 : two 3 : three

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

a = for key in a.keys(): print(key) 1 2 3

Аналогичным образом нужно поступить, чтобы вывести только значения словаря. Однако в таком случае в цикле for используется метод values.

a = for val in a.values(): print(val) one two three

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

Поиск

Проверить наличие определенного ключа можно при помощи операции in. Для этого достаточно вывести результат ее выполнения для словаря по имени a.

a = print(2 in a) print(4 in a) True False

Как можно заметить, проверка ключа 2 дала положительный результат (True). Во втором случае вывелось значение False, поскольку ключа 4 в словаре не обнаружено.

Сортировка

Средства языка дают возможность проводить в Python сортировку словаря по ключам и значениям, в зависимости от необходимости. В следующем примере имеется коллекция данных по имени a, в которой содержится информация в произвольном порядке. Ключами здесь выступают числа, а значениями являются строки. Сортировка осуществляется за счет импортированного модуля operator и встроенного метода itemgetter, получающего 0 или 1.

import operator a = b = sorted(a.items(), key = operator.itemgetter(0)) print(b) b = sorted(a.items(), key = operator.itemgetter(1)) print(b) [(1, 'one'), (2, 'two'), (3, 'three')] [(1, 'one'), (3, 'three'), (2, 'two')]

Как можно заметить, аргумент 0 позволяет отсортировать словарь по ключу, в то время как 1 дает возможность вывести его содержимое в алфавитном порядке значений.

Сравнение

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

a = b = c = print(cmp(a, b)) print(cmp(b, c)) print(cmp(a, c)) 1 -1 0

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

Копирование

Метод copy используется для копирования содержимого одного словаря в другой. Данный пример демонстрирует перенос ключей и значений из коллекции a в b.

a = b = a.copy() print(b)

Как можно заметить, порядок и содержимое всех пар было сохранено в новом наборе.

Очистка

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

a = a.clear() print(a) <>

В результате получается абсолютно пустой набор данных.

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

Как и с другими наборами данных, производить заполнение словарей можно при помощи генераторов. В следующем примере демонстрируется создание числовых пар коллекции с использованием генератора словарей Python с методом range, получающего в качестве аргумента 5.

a = print(a)

Таким образом, на выходе получается словарь a, включающий в себя ровно 5 пар. Ключами являются числа от 0 до 4, а значениями выступают их математические квадраты.

Конвертация в строку

Словарь можно очень легко преобразовать в строку для более удобной работы с цельным представлением его содержимого. Чтобы сделать это, потребуется функция str. Как можно видеть из результатов выполнения метода type, конвертация прошла успешно.

a = b = str(a) print(b) print(type(b))

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

a = » b = eval(a) print(b) print(type(b))

Как видно из примера, метод eval конвертирует весь текст строки в новый словарь.

Вложенные

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

a = < "First": < 1: "one", 2: "two", 3: "three" >, "Second": < 4: "four", 5: "five" >> print(a) , 'Second': >

В примере, описанном выше, создается словарь a, включающий в себя два других словаря (First и Second). Те, в свою очередь, содержат несколько пар ключей и значений.

Резюме

Следующая таблица демонстрирует краткую сводку по всем рассмотренным методам для работы со словарями в Python 3. В таблице отображаются названия методов, а также информация о их назначении.

Название Назначение
update Объединение содержимого двух словарей в один
len Получение размера
items Возвращает пары (ключи и значения)
keys Возвращает ключи
values Возвращает значения
copy Копирует содержимое в другой словарь
clear Полная очистка всех элементов
eval Конвертация строки в словарь

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

Как создать словарь у которого 1 ключ имел бы значение равное еще 2-ум ключам у которых есть значение. И как я могу обращаться к этим значениям чтобы изменить.

  • Вопрос задан более года назад
  • 648 просмотров

Комментировать

Решения вопроса 0

Ответы на вопрос 2

freeExec

Участник OpenStreetMap

Используй список вместо единственного значения.

Ответ написан более года назад

Комментировать

Нравится 1 Комментировать

GavriKos

Словарь, у которого значение — тоже словарь. Например так.

Ответ написан более года назад

Артём Санников

Данная книга является руководством для начинающих специалистов в области анализа и обработки данных. В книге рассматривается язык SQL и его процедурное расширение PL/SQL от компании Oracle.

Главная › Языки программирования › Python › Словари › Добавление новых пар «ключ-значение» в словарь Python

Добавление новых пар «ключ-значение» в словарь Python

Словари в Python относятся к динамическим структурам данных, так как в словарь можно в любое время добавить новые пары «ключ-значение». Чтобы добавить новую пару, необходимо указать имя словаря, а затем в квадратных скобках [ ] указать новый ключ и значение.

В качестве примера добавим новую пару «ключ-значение» в словарь man

# Словарь с параметрами мужчины man = # Добавляем в словарь новую пару man[«height»] = «200» # Выводим обновлённый словарь print(man) # Финальный результат в консоли

Записи по теме

  • Словарь в словаре Python
  • Список в словаре Python
  • Список словарей в Python
  • Перебор всех значений в словаре Python
  • Упорядоченный перебор словаря в Python
  • Перебор всех ключей в словаре Python
  • Перебор всех пар «ключ-значение» в словаре Python
  • Удаление пар «ключ-значение» в словаре Python

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

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

Доступ к значениям словаря

dictionary = print(dictionary["Hello"])

Приведённый выше код выведет 1234 .

Строка «Hello» в этом примере называется ключом. Он используется для поиска значения в словаре, помещая ключ в квадратные скобки.

Число 1234 видно после соответствующего двоеточия в словаре. Это значение, на которое ведёт «Hello» в словаре.

Поиск значения, с несуществующим ключом, вызовет исключение KeyError , остановив выполнение. Если мы хотим получить доступ к значению, без риска получить KeyError , мы можем использовать метод dictionary.get . По умолчанию, если ключ не существует, метод вернет None . Мы можем передать ему второе значение, чтобы вернуть вместо None в случае неудачного поиска.

x = dictionary.get(«whatever», «nuh-uh»)

В этом примере w получит значение None , а x получит значение «nuh-uh» .

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

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

dict(a=1, b=2, c=3) # dict([('d', 4),('e', 5),('f', 6)]) # dict([('a', 1)], b=2, c=3) # dict(, c=3) #

Как избегать исключений KeyError

Распространённая ошибка при использовании словарей — доступ к несуществующему ключу. Это обычно приводит к исключению KeyError :

mydict = <> mydict['not there'] # Traceback (most recent call last): # File "", line 1, in # KeyError: 'not there'

Один из способов избежать KeyError — использовать метод dict.get , который позволяет вам указать значение по умолчанию, которое будет возвращать в случае отсутствия ключа.

value = mydict.get(key, default_value)

Возвращает mydict[key] , если он существует, но в противном случае возвращает default_value . Обратите внимание, что это не добавляет key к mydict . Поэтому, если вы хотите сохранить эту пару ключ-значение, вы должны использовать mydict.setdefault(key, default_value) , который хранит пару ключ-значение.

mydict = <> print(mydict) # <> print(mydict.get("foo", "bar")) # bar print(mydict) # <> print(mydict.setdefault("foo", "bar")) # bar print(mydict) #

Другой способ избавиться от ошибки — перехватить исключение

try: value = mydict[key]except KeyError: value = default_value

Вы также можете проверить, есть ли ключ словаре:

if key in mydict: value = mydict[key]else: value = default_value

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

В качестве другого вариант можно использовать подкласс dict collection.defaultdict , который имеет значение default_factory для создания новых записей в dict при получении new_key .

Доступ к ключам и значениям

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

Словарь будет таким:

mydict =

Вы можете получить список ключей, используя метод keys или функцию dict_keys :

print(mydict.keys()) dict_keys(['b', 'a'])

Если вместо этого вы хотите получить список значений, используйте метод values или функцию dict_values :

print(mydict.values()) dict_values(['2', '1'])

Если вы хотите работать как с ключом, так и с соответствующим значением, вы можете использовать метод items или функцию dict_ items :

print(mydict.items()) dict_items([('b', '2'),('a', '1')])

Примечание. Поскольку словари не отсортированы, keys , values и items не имеют порядка сортировки. Используйте функции sort , sorted или класс OrderedDict , если вам важен порядок, в котором возвращают эти методы.

Введение в словарь

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

Словари можно создавать разными способами:

С помощью литерала

d = <> # пустой словарь d = # словарь с начальными значениями  # Распаковка одного или нескольких словарей литералом d = <**otherdict># создаёт копию otherdict d = <**otherdict, **yetanotherdict># создает копию otherdict и butanotherdict 

С помощью генератора словаря

Через встроенный класс dict()

d = dict() # пустой словарь d = dict(key='value') #точные именованные аргументы d = dict([('key', 'value')]) # передаёт в список пар key/value d = dict(**otherdict) # делает мелкую копию another dict (возможно только если все ключи являются строками!)

Модификация словаря

Чтобы добавить элементы в словарь нужно создать новый ключ со значением:

d['newkey'] = 42

Также можно добавить список или словарь в качестве значения:

d['new_list'] = [1, 2, 3] d['new_dict'] =

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

Словари со значениями по умолчанию

Доступно в стандартной библиотеке как defaultdict

from collections import defaultdict d = defaultdict(int) d['key'] # 0 d['key'] = 5 d['key'] # 5 d = defaultdict(lambda: 'empty') d['key'] # 'empty' d['key'] = 'full' d['key'] # 'full'

В качестве альтернативы, если вы используете встроенный класс dict , использование dict.setdefault() позволит создать значение по умолчанию всегда, когда вы обращаетесь к отсутствующему ранее ключу:

d = <> d.setdefault('Another_key', []).append("This worked!") d #

Если вам нужно добавить много значений, dict.setdefault() будет создавать новый экземпляр начального значения (в этом примере a[]) каждый раз, когда оно вызывается, создавая лишнюю нагрузку.

Как создать упорядоченный словарь

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

Используйте OrderedDict из модуля collections . Он будет возвращать элементы словаря в исходном порядке когда переборка завершится:

from collections import OrderedDict d = OrderedDict() d['first'] = 1 d['second'] = 2 d['third'] = 3 d['last'] = 4 # Outputs "first 1", "second 2", "third 3", "last 4" for key in d: print(key, d[key])

Распаковка словарей с помощью оператора **

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

def parrot(voltage, state, action): print("This parrot wouldn't", action, end='') print("if you put", voltage, "volts through it.", end='') print("E's", state, "!") d = parrot(**d) #This parrot wouldn't VOOM if you put four million volts through it. E's bleedin' demised !

Начиная с Python 3.5 вы также можете использовать этот синтаксис для объединения произвольного числа объектов [ dict ].

fish = dog = fishdog = <**fish, **dog>fishdog  #

Этот пример показывает, что дубликаты ключей соответствуют последнему значению (например, «Клиффорд» переопределяет «Немо»).

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

Рассмотрим разные словари:

fish = dog =

Python 3.5+

fishdog = <**fish, **dog>fishdog #

В этом примере, дубликаты ключей соответствуют последнему значению (например, «Клиффорд» переопределяет «Немо»).

Python 3.3+

from collections import ChainMap dict(ChainMap(fish, dog)) #

Здесь первостепенное значение отдаётся кокретному ключу, а не последнему («Клиффорд» выбрасывается в пользу «Немо»).

Python 2.x, 3.x

from itertools import chain dict(chain(fish.items(), dog.items())) # 

Здесь используется последнее значение, как и в методе слияния [**] («Клиффорд» переопределяет «Немо»).

fish.update(dog) fish #

Замыкающая запятая

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

role =

PEP 8 требует, чтобы вы оставляли пробел между замыкающей запятой и закрывающей скобкой.

Все комбинации значений словаря

Дан словарь в примере выше, где есть список, представляющий набор значений для поиска соответствующего ключа. Предположим, вы хотите найти ‘x’ = «a» с ‘y’ = 10 , затем ‘x’ = «a» с ‘y’ = 10 и т. д., пока вы не переберете все возможные комбинации.

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

import itertools options = < "x": ["a", "b"], "y": [10, 20, 30] >keys = options.keys() values = (options[key] for key in keys) combinations = [dict(zip(keys, combination)) for combination in itertools.product(*values)]

Это дает нам следующий список, хранящийся в переменной combinations :

print(combinations) #[, # , # , # , # , # ]

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

Если вы используете словарь в качестве итератора (например, в операторе for ), он перемещает ключи в словаре. Например:

d = for key in d: print(key, d[key]) # a 1 # b 2 # c 3

Работает таким же образом в генераторах:

print([key for key in d]) # ['a', 'b', 'c']

Метод items() можно использовать для одновременного зацикливания ключа и значения:

for key, value in d.items(): print(key, value) # a 1 # b 2 # c 3

Метод values() можно использовать для перебора только значений:

for key, value in d.values(): print(key, value) # Traceback (most recent call last): # File "", line 1, in # TypeError: cannot unpack non-iterable int object for value in d.values(): print(value) # 1 # 2 # 3

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

Правила создания словаря:

  • каждый ключ должен быть уникальным (иначе он будет переопределен);
  • каждый ключ должен быть хэшируемым (для хеширования применяется функция hash) в противном случае возникнет исключение TypeError;
  • для ключей нет определённого порядка.
#Создание и заполнение значениями stock = #Создание пустого словаря dictionary = <> #И заполнение его позднее dictionary['eggs'] = 5 dictionary['milk'] = 2 #Значения также могут быть списками mydict = #Используй метод list.append() чтобы добавить новый элемент в список значений mydict['a'].append(4) # => mydict['b'].append('four') # => # Мы также можем создать словарь, используя список из двух элементов iterable = [('eggs', 5),('milk', 2)] dictionary = dict(iterables) # Или используя именованный аргумент: dictionary = dict(eggs=5, milk=2) #Другой способ использования dict.fromkeys: dictionary = dict.fromkeys((milk, eggs)) # => dictionary = dict.fromkeys((milk, eggs), (2, 5)) # =>

Примеры словарей

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

car = <> car["wheels"] = 4 car["color"] = "Red" car["model"] = "Corvette"

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

print "Little " + car["color"] + " " + car["model"] + "!" # Этот код напечатает "Little Red Corvette!"

Словари также могут быть созданы в стиле JSON:

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

for key in car: print key + ": " + car[key]  # wheels: 4 # color: Red # model: Corvette

Синтаксис

mydict = <> mydict[k] = value value = mydict[k] value = mydict.get(k) value = mydict.get(k, "default_value")

Примечания

Что следует помнить при использовании словаря:

  • каждый ключ должен быть уникальным (иначе он будет переопределен);
  • каждый ключ должен быть хэшируемым (для хеширования применяется функция hash) в противном случае возникнет исключение TypeError;
  • для ключей нет определённого порядка.

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

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