Как из списка сделать словарь python 3
Перейти к содержимому

Как из списка сделать словарь python 3

  • автор:

Python Zip: Как преобразовать список в словарь

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

Python Zip

Чтобы создать словарь из двух последовательностей, используйте методы dict() и zip(). В Python 3 метод zip() теперь возвращает ленивый итератор, который сейчас является наиболее часто используемым подходом.

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

stocks = ['reliance', 'infosys', 'tcs'] prices = [2175, 1127, 2750] dictionary = dict(zip(stocks, prices)) print(dictionary) 

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

Метод zip(fields, values) возвращает итератор, который генерирует кортежи из двух элементов. Если вы вызываете dict() на этом итераторе, вы можете создать нужный вам словарь. Элементы первого списка становятся ключами словаря, а элементы второго списка представляют значения в словаре.

Важно отметить, что dictionary = не работает. Вы должны явно объявить dict(zip()) . Если вы заставите его работать, то вам придется использовать правильное понимание словаря.

Понимание словаря

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

Минимальный синтаксис для понимания словаря следующий.

dictionary =

См. следующий пример кода:

stocks = ['reliance', 'infosys', 'tcs'] prices = [2175, 1127, 2750] new_dict = print(new_dict) 

Как из списка сделать словарь python 3

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

Структура данных, позволяющая идентифицировать ее элементы не по числовому индексу, а по произвольному, называется словарем или ассоциативным массивом. Соответствующая структура данных в языке Питон называется dict .

Рассмотрим простой пример использования словаря. Заведем словарь Capitals , где индексом является название страны, а значением — название столицы этой страны. Это позволит легко определять по строке с названием страны ее столицу.

# Создадим пустой словать Capitals Capitals = dict() # Заполним его несколькими значениями Capitals['Russia'] = 'Moscow' Capitals['Ukraine'] = 'Kiev' Capitals['USA'] = 'Washington' Countries = ['Russia', 'France', 'USA', 'Russia'] for country in Countries: # Для каждой страны из списка проверим, есть ли она в словаре Capitals if country in Capitals: print('Столица страны ' + country + ': ' + Capitals[country]) else: print('В базе нет страны c названием ' + country)

Итак, каждый элемент словаря состоит из двух объектов: ключа и значения. В нашем примере ключом является название страны, значением является название столицы. Ключ идентифицирует элемент словаря, значение является данными, которые соответствуют данному ключу. Значения ключей — уникальны, двух одинаковых ключей в словаре быть не может.

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

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

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

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

Когда нужно использовать словари

  • Подсчет числа каких-то объектов. В этом случае нужно завести словарь, в котором ключами являются объекты, а значениями — их количество.
  • Хранение каких-либо данных, связанных с объектом. Ключи — объекты, значения — связанные с ними данные. Например, если нужно по названию месяца определить его порядковый номер, то это можно сделать при помощи словаря Num[‘January’] = 1; Num[‘February’] = 2; . .
  • Установка соответствия между объектами (например, “родитель—потомок”). Ключ — объект, значение — соответствующий ему объект.
  • Если нужен обычный массив, но масимальное значение индекса элемента очень велико, и при этом будут использоваться не все возможные индексы (так называемый “разреженный массив”), то можно использовать ассоциативный массив для экономии памяти.

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

Пустой словарь можно создать при помощи функции dict() или пустой пары фигурных скобок <> (вот почему фигурные скобки нельзя использовать для создания пустого множества). Для создания словаря с некоторым набором начальных значений можно использовать следующие конструкции:

Capitals = Capitals = dict(Russia = 'Moscow', Ukraine = 'Kiev', USA = 'Washington') Capitals = dict([("Russia", "Moscow"), ("Ukraine", "Kiev"), ("USA", "Washington")]) Capitals = dict(zip(["Russia", "Ukraine", "USA"], ["Moscow", "Kiev", "Washington"])) print(Capitals)

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

Работа с элементами словаря

Основная операция: получение значения элемента по ключу, записывается так же, как и для списков: A[key] . Если элемента с заданным ключом нет в словаре, то возникает исключение KeyError .

Другой способ определения значения по ключу — метод get : A.get(key) . Если элемента с ключом get нет в словаре, то возвращается значение None . В форме записи с двумя аргументами A.get(key, val) метод возвращает значение val , если элемент с ключом key отсутствует в словаре.

Проверить принадлежность элемента словарю можно операциями in и not in , как и для множеств.

Для добавления нового элемента в словарь нужно просто присвоить ему какое-то значение: A[key] = value .

Для удаления элемента из словаря можно использовать операцию del A[key] (операция возбуждает исключение KeyError , если такого ключа в словаре нет. Вот два безопасных способа удаления элемента из словаря.

A = key = 'ac' if key in A: del A[key] try: del A[key] except KeyError: print('There is no element with key "' + key + '" in dict') print(A)

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

Еще один способ удалить элемент из словаря: использование метода pop : A.pop(key) . Этот метод возвращает значение удаляемого элемента, если элемент с данным ключом отсутствует в словаре, то возбуждается исключение. Если методу pop передать второй параметр, то если элемент в словаре отсутствует, то метод pop возвратит значение этого параметра. Это позволяет проще всего организовать безопасное удаление элемента из словаря: A.pop(key, None) .

Перебор элементов словаря

Можно легко организовать перебор ключей всех элементов в словаре:

A = dict(zip('abcdef', list(range(6)))) for key in A: print(key, A[key])

Следующие методы возвращают представления элементов словаря. Представления во многом похожи на множества, но они изменяются, если менять значения элементов словаря. Метод keys возвращает представление ключей всех элементов, метод values возвращает представление всех значений, а метод items возвращает представление всех пар (кортежей) из ключей и значений.

Соответственно, быстро проверить, есть ли значение val среди всех значений элементов словаря A можно так: val in A.values() , а организовать цикл так, чтобы в переменной key был ключ элемента, а в переменной val , было его значение можно так:

A = dict(zip('abcdef', list(range(6)))) for key, val in A.items(): print(key, val)

Словари и методы в Python. Добавление списка в словарь

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

Словарь (dictionary) в Python используется наряду с кортежами и списками, похожие структуры есть и в других языках программирования (ассоциативный массив в PHP, словарь в C#).

Словарь, как и список, хранит коллекцию элементов. И каждый элемент в словаре, как было уже упомянуто, имеет уникальный ключ — с ним ассоциировано какое-либо значение.

Вот синтаксис словаря в Python:

dictionary =

А вот ещё пример словаря:

dictionary =

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

gender_dict =

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

dictionary =

Получаем данные из словаря

Чтобы получить значения конкретного ключа используют квадратные скобки [] . Представим, что у нас в словаре присутствует пара «марафон»: 26.

 
# берём значение с ключом «марафон» dictionary['марафон']

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

Как добавлять и обновлять ключи

Добавление в словарь новых пар выполняется просто:

 
# Добавляем ключ «туфля» со значением «род обуви, который закрывает ногу не выше щиколотки» dictionary['туфля'] = 'род обуви, который закрывает ногу не выше щиколотки'

Для обновления делаем то же самое:

 
# Обновляем ключ "туфля" и присваиваем ему значение "хорошая туфля" dictionary['туфля'] = 'хорошая туфля'

Как удалять ключи

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

 
# Удаляем значение с ключом "противостоять" из словаря del dictionary['противостоять']

Методы

Cловари имеют много полезных методов, помогающих в работе. Рассмотрим наиболее популярные.

Update

Метод update() нужен при объявлении нескольких пар одновременно. В качестве аргумента метод принимает другой словарь:

# Добавляем две пары в словарь dictionary, используя метод update dictionary.update() >>> dictionary

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

Get

# Представьте, что у нас есть словарь story_count story_count =

get() возвратит значение по указанному ключу. А если его нет, то метод вернёт нам None .

 
# Ключ "двенадцать" существует и метод get в данном случае вернёт 12 story_count.get('двенадцать')

Способ используют при проверке, а есть ли ключи в словаре:

 
>>> story_count.get('два') None

Кроме того, вы можете указать значение по умолчанию — оно вернётся вместо None , если ключа не будет в словаре:

 
# Метод вернёт 0 в случае, если данного ключа не существует story_count.get('два', 0)

Pop

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

>>> story_count.pop('девяносто') 90 >>> story_count

Keys

Метод keys() необходим, чтобы возвратить коллекцию ключей в словаре:

 
>>> story_count.keys() ['сто', 'пять', 'двенадцать']

Values

Возвратит коллекцию значений в словаре.

 
>>> story_count.values() [100, 12, 5]

Items

Если нужно вернуть пары «ключ — значение», используют items() :

 
>>> dictionary.items() [('персона', 'человек'), ('бежать', 'двигаться со скоростью'), ('туфля', 'род обуви, закрывающей ногу не выше щиколотки'), ('бежал', 'бежать в прошедшем времени'), ('марафон', 'гонка бегунов длиной около 26 миль'), ('туфли', 'туфля во множественном числе')]

Итерация через словарь

В «Питоне» есть возможность выполнить итерацию в словаре по каждому ключу:

 
for key in story_count: print(key)

Кстати, вместо story_count можно применять story_count.keys() .

Внимательно посмотрите на участок кода ниже: в нём цикл for использует метод items() , чтобы получить пары «ключ — значение» на каждую итерацию:

 
>>> for key, value in dictionary.items(): print(key, value) ('персона', 'человек') ('бежать', 'двигаться со скоростью') ('туфля', 'род обуви, закрывающей ногу не выше щиколотки') ('бежал', 'бежать в прошедшем времени') ('марафон', 'гонка бегунов длиной около 26 миль') ('туфли', 'туфля во множественном числе')

Словарь и список: выполнение преобразования из списка в словарь

Словарь (dictionary) и список (list) — типы, непохожие по своей структуре. Однако для отдельных видов списка есть возможность преобразования списка в словарь. Для этого используют встроенную функцию dict() . Необходимо, чтобы список хранил набор вложенных списков. Также нужно, чтобы каждый вложенный список состоял из 2-х элементов. В результате во время конвертации списка в словарь 1-й элемент превратится в ключ, 2-й — в значение:

users_list = [ ["+111123455", "Tom"], ["+384767557", "Bob"], ["+958758767", "Alice"] ] users_dict = dict(users_list) print(users_dict) #

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

 
users_tuple = ( ("+111123455", "Tom"), ("+384767557", "Bob"), ("+958758767", "Alice") ) users_dict = dict(users_tuple) print(users_dict)

Материал подготовлен специально для OTUS на основании статьи «Python Dictionary and Dictionary Methods».

Как преобразовать список в словари?

drygdryg

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

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

В данном случае входной список вам следует сначала разделить на набор отдельных списков, где в каждом первым элементом будет ваш идентификатор, а дальше список ключей и значений. Это можно оформить отдельной функцией. В том, втором вопросе было видно, что разделить входную последовательность можно, например, по значению 'ID'. В примерах, приведённых здесь, нет такихэлементов, поэтому тут придётся ориентироваться на тип или четность.
Когда у вас будет последовательность списков, первый элемент - ключ всего списка, легко отделить слайсом, а весь хвост можно легко превратить в пары ключ-значение вот таким вот способом:

In [1]: lst=[1,2,3,4,5,6] In [2]: dict(zip(itr:=iter(lst), itr)) Out[2]:

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

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

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