Это очень распространенный вопрос и ответ: это зависит. Это зависит от данных в списке и как вы хотите, чтобы он был представлен в словаре.
В этой статье мы проводим шесть разных способов преобразования списка в словарь. Вы также можете посмотреть мое продвинутое видео одноклассное видео, где мы покажем вам некоторые из контента в этой статье:
1. Преобразование списка примитивных типов данных, чтобы определиться с использованием индексов в качестве клавиш
Проблема : Преобразуйте список примитивных типов данных в словарь, используя индексы элементов.
Пример В качестве примера возьмите этот список:
snakes = ['Anaconda', 'Python', 'Cobra', 'Boa', 'Lora' ]
Вы хотите преобразовать этот список в словарь, где каждая запись состоит из ключа и значения.
- Ключ является индексом каждого элемента в списке змеи.
- Значение представляет собой строковый элемент из списка.
Так что в конце концов, словарь должен выглядеть так:
d = {0: 'Anaconda', 1: 'Python', 2: 'Cobra', 3: 'Bora', 4: 'Lora'}
Идея решения : Возьмите понимание словаря и используйте функцию перечисления для генерации пар ключа.
Теперь посмотрим, как вы можете реализовать логику для достижения этого?
- Во-первых, создайте пустой словарь.
- Во-вторых, цикла по спискому змею и добавьте записи клавишных значений в пустой словарь.
- Чтобы генерировать пары клавишных значений, используйте встроенный Python Function
перечислять ()
Отказ Эта функция принимает намерение и возвращает кортеж для каждого элемента в Iterable. В этих кортежах первая запись – это индекс элемента, а вторая запись – это сам элемент. Например:Перечислять ('abc')
даст вам перечисленный объект, содержащий значения(0, 'A'), (1, 'B'), (2, 'C')
Отказ
Код : А вот код.
# list to convert snakes = ['Anaconda', 'Python', 'Cobra', 'Boa', 'Lora' ] # Short hand constructor of the dict class d = {} for index, value in enumerate(snakes): d[index] = value
И это все, что вам нужно, словарь D
Содержит только записи, которые вы хотели иметь.
Более питоновый способ решить проблему с использованием понимания словаря. Это делает код короче и на мой взгляд даже проще читать. Посмотри на это:
# list to convert snakes = ['Anaconda', 'Python', 'Cobra', 'Boa', 'Lora' ] # dictionary comprehension d = {index: value for index, value in enumerate(snakes)}
Попробуй сам:
Итак, еще раз, встроенная функция Python перечисляет проблему, остальные просты.
2. Конвертировать список кортежей ключей, чтобы определить
Проблема : Как преобразовать список кортежей в словарь в Python с использованием первых ценностей кортежей в качестве словарных клавиш и второе значения кортежа в качестве значений словаря.
Пример : Мы принимаем список кортежей цвета змеи, в качестве примера.
snake_colors = [('Anaconda', 'green'), ('Python', 'green'), ('Cobra', 'red'), ('Boa', 'light-green'), ('Lora', 'green-brown')]
Решение : На самом деле эта проблема еще проще решать как первую, потому что работа перечисления функций уже сделана, все, что нам нужно сделать, это добавить записи в словарь.
Такой список можно сопоставить на словарь, просто позвонив Dict ()
Конструктор с этим списком в качестве аргумента. Таким образом, весь код будет такой же простой, как это:
d = dict(snake_colors)
3. Преобразовать два списка на один дикт
Во-первых, давайте определим вашу проблему точнее. У вас есть два списка элементов. Первый список содержит наши ключи, а второй содержит значения. В конце концов, вы хотите иметь словарь, чьи записи должны выглядеть так:
key = lst1[i], value = lst2[i]
Опять же, Python приносит все функции, которые вам нужны в виде встроенных функций. Предположим, что ваши списки выглядят так:
snakes = ['Anaconda', 'Python', 'Cobra', 'Boa', 'Lora'] colors = ['green', 'green', 'red', 'light-green', 'green-brown']
Чтобы преобразовать эти два списка в тот же словарь, что и в предыдущем абзаце, нам нужна встроенная функция ZIP (). Требуется два или более повторных в качестве аргументов и создает от них кортежи.
Кортежи выглядят так: (Iterable1 [I], Iterable2 [I], ..., IterableN [I])
С помощью следующей строки кода мы получим список кортежей на ключ:
snakes = ['Anaconda', 'Python', 'Cobra', 'Boa', 'Lora'] colors = ['green', 'green', 'red', 'light-green', 'green-brown'] tuples = list(zip(snakes, colors))
Мы уже видели в разделе 2, как мы можем преобразовать список кортежей в словарь. Теперь Python очень мощный и не требует преобразования в список, прежде чем мы сможем преобразовать список кортежей в словарь, вместо этого мы можем пройти результат ZIP (змеи, цвета)
непосредственно к конструктору Dict.
Последний код выглядит так:
snakes = ['Anaconda', 'Python', 'Cobra', 'Boa', 'Lora'] colors = ['green', 'green', 'red', 'light-green', 'green-brown'] d = dict(zip(snakes, colors))
4. Преобразовать список переменных клавиш, стоимость записей в Dict
Идея : Используйте Slicing, чтобы получить два отдельных списка, один с ключами, одним со значениями. Закрепите их вместе и создайте словарь, передавая ZIP-результат к Dict ()
конструктор.
Чтобы сделать его более визуальным, давайте возьмем в качестве примера следующий список названий города и Zip-коды (больше нет змей;)):
city_zip = ['Berlin', 10178, 'Stuttgart', 70591, 'München', 80331, 'Hamburg', 20251]
Из этого списка мы хотим создать словарь, где названия города являются ключами, а их Zip-коды являются значениями.
Существует много разных решений этой проблемы, поэтому я решил показать вам решение, которое я считаю действительно пифингом. Он использует нарезку и сочетает в себе то, что мы видели в предыдущем разделе.
Как вы знаете (если не обновлять его здесь ) Мы можем установить начальное значение, конечное значение и значение шага для нарезки нарезки. Так с City_zip [:: 2]
Мы получаем все названия города и с City_zip [1:: 2]
Мы получаем почтовый индекс. Положить все вместе, мы получаем этот код:
city_zip = ['Berlin', 10178, 'Stuttgart', 70591, 'München', 80331, 'Hamburg', 20251] city = city_zip[::2] zip_code = city_zip[1::2] d = dict(zip(city, zip_code))
5. Преобразовать список словарей в одно дикт
Идея : Используйте словарь, распакованный в петле. Метод Обновление ()
класса Dict добавляет данные в существующий словарь.
Давайте представим следующее применение: транспортное средство отправляет постоянный поток данных телеметрии как словари. Чтобы уменьшить задержку, словари содержат только обновления. Чтобы получить последнее общее состояние транспортного средства, мы хотим объединить все эти словари в один. Как вы, возможно, уже догадались, Python делает его очень легко. Вот код:
state_0 = {'coord_x': 5.123, 'coord_y': 4.012, 'speed': 0, 'fuel': 0.99} state_1 = {'coord_x': 5.573, 'speed': 10, 'fuel': 0.83} state_2 = {'coord_x': 6.923, 'speed': 25, 'fuel': 0.75} state_3 = {'coord_x': 7.853, 'coord_y': 4.553, 'fuel': 0.68} state_4 = {'coord_x': 10.23, 'speed': 50, 'fuel': 0.61} d = dict(state_0) data_stream = [state_0, state_1, state_2, state_3, state_4] for state in data_stream: # updates only the changed entries in the dict d.update(**state)
После обработки потока данных наш словарь D содержит текущее состояние транспортного средства.
6. Преобразовать список в словарные ключи в Python
Идея : Инициализируйте словарь с конструктором Dict. Как проходит аргумент в результате Zaipping вместе список ключей с Генератор который постоянно возвращается значение по умолчанию.
Я хотел бы перефразировать проблему в практическую проблему первым. У нас есть список имен, скажем, игроки и хотите создать словарь, где мы можем комфортно обновлять свои очки для текущей игры.
С встроенной функцией Python на молнии мы можем застегивать два списка и пройти результат zip в конструктор Dict. Поскольку у нас есть только один список ключей, нам нужно как-то создать список значений по умолчанию одной и той же длины. Я выбрал выражение генератора для этого. Он возвращает значение по умолчанию 0 для каждого элемента в списке плееров. Теперь мы можем бросить список игроков и выражение генератора в функцию ZIP и пройти результат к конструктору Dict – вот и все!
players = ['Alice', 'Bob', 'Cloe', 'Dain'] default_value_gen = (0 for x in range(len(players))) d = dict(zip(players, default_value_gen))
Заключение
Как мы видели в этой статье, Python имеет мощные встроенные функции, которые позволяют очень легко преобразовать данные из любого данного формата в словарь. Чтобы подготовить себе к новой проблеме преобразования-преобразования в словаре, я рекомендую вам прочитать нашу статью о словарях.
Знание словарей, и их методы хорошо, это база для используя их власть при любых обстоятельствах.
Куда пойти отсюда?
Хотите начать зарабатывать на полный рабочий день с Python – пока работаю только неполный рабочий день? Затем присоединяйтесь к нашему бесплатным Python Freelancer Webinar Отказ
Он точно показывает, как вы можете вырастить свой бизнес и навыки Python в точку, где вы можете работать комфортно на 3-4 часа от дома и наслаждаться остальными часами), проводить время с людьми, которых вы любите делать вещи, которые вам нравится делать Отказ
Стать питоном фрилансером сейчас!