Работая над проектом Python, я столкнулся с необходимостью хранить пользовательские данные, такие как имя пользователя, адрес электронной почты, пароль и возраст, в словарном типе данных (пара ключ-значение).
Это возможно только тогда, когда мы создаем словарь списков. Итак, ключом будет имя пользователя, а значением — список других данных.
Давайте разберем ситуацию на одном небольшом примере, чтобы вы лучше поняли, где следует использовать эти подходы.
Итак, перед созданием словаря у нас есть такие данные:
username_1 = ['email', 'password', 'age'] username_2 = ['email', 'password', 'age']
Но что, если там будут миллионы пользователей? Будет сложнее управлять всеми разными списками. Вот почему нам нужно создать словарь, чтобы мы могли хранить данные в парах ключ-значение, например:
users_data = { "username_1" : ['email', 'password','age'], "username_2" : ['email', 'password','age'], }
- Используя словарные литералы
- Используя методы dict() и zip()
- Используя понимание словаря
- С помощью метода defaultdict()
- С использованием цикла for и метода update()
- С использованием метода setdefault()
- С использованием метода dict.fromkeys()
- С использованием метода zip_longest()
- Используя индекс
Используя словарные литералы
Сначала мы покажем вам, как создать список непосредственно внутри словаря, а также объясним, как использовать элементы списка внутри словаря.
Синтаксис:
var_name = { "key_name": [value1, value2, val3 .......], }
- Этот синтаксис будет полезен, когда нам нужно создать список списков Python.
employee_ratings = { 'James': [72, 63, 87], 'Adam': [56, 65, 69], 'John': [88, 79, 84] } print(f"Dictionary is : \n",employee_ratings,"\n\n") for x in employee_ratings.items(): name, rating = x avg = sum(rating)/len(rating) print('Average rating of', name, 'is', avg)
В приведенном выше коде мы создаем словарь, где ключом является имя сотрудника, а значения задаются в виде рейтинга сотрудников в списке за три месяца.
Итак, мы создаем список рейтингов непосредственно внутри словаря сотрудника_rating. Затем мы вычисляем средний рейтинг за три месяца и описываем его.
«для x в сотруднике_ratings.items()» мы можем использовать элемент списков словарей в Python.
Используя методы dict() и zip()
В ситуации, когда есть два разных списка и вам нужно создать словарь и включить эти списки в пары ключ-значение, вы можете использовать методы dict() и zip().
Метод zip() используется для объединения нескольких коллекций в один объект и возврата элементов в парах кортежей.
Предположим, есть два списка: list_1 = [1,2,3] и
список_2 = [4,5,6]. Если вы используете метод zip, подобный этому list(zip(list_1, list_2)), он вернет
[(1, 4),(2, 5),(3, 6)].
dict() — это конструктор Python, который используется для определения словаря в Python.
Синтаксис:
dict(zip(list_1, list_2))
- dict(zip(list_1, list_2)): этот синтаксис поможет создать список в словаре.
Давайте разберемся на практическом примере создания словаря списков Python.
username = ['James', 'Adam', 'John'] user_data = [ ['[email protected]', 2641, 26], ['[email protected]', 4521, 39], ['[email protected]', 8965, 42] ] database = dict(zip(username, user_data )) print(database)
В приведенном выше коде у нас есть два разных списка с именами username и user_data, где значения доступны в виде вложенных списков, поэтому мне нужно создать словарь, в котором имя пользователя должно быть ключом, а user_data — значениями в списке.
Итак, мы создали словарь с именем data и использовали методы dict и zip() следующим образом: data = dict(zip(username, user_data)).
Используя понимание словаря
В Python понимание словаря — это процесс создания словаря из существующих данных. Итак, мы будем использовать однострочный цикл в понимании словаря, чтобы перебирать элементы списка по отдельности и включать их в словарь один за другим.
Синтаксис:
dictionary_name = {key[i]: value[i] for i in range(len(key))}
Вот пример создания словаря списков Python с использованием словарного понимания.
username = ['James', 'Adam', 'John'] user_data = [ ['[email protected]', 2641, 26], ['[email protected]', 4521, 39], ['[email protected]', 8965, 42] ] database = {username[i]: user_data[i] for i in range(len(username))} print(database)
В приведенном выше коде мы использовали тот же сценарий, что и в предыдущей программе, но на этот раз мы создадим словарь списков, используя понимание словаря в Python.
Итак, сначала будет выполнен однострочный цикл for «for i in range(len(username)»), где «i» будет перебирать каждый элемент списка, например это имя пользователя[i]: user_data[i], и добавьте элементы в словарь.
С помощью метода defaultdict()
Обычно для обработки ошибок используется метод defaultdict(), если мы попытаемся получить доступ к значению несуществующего ключа, то вместо выдачи ошибки ключа будет возвращено значение типа данных по умолчанию, которое мы предоставим в качестве параметра defaultdict().
Итак, мы создадим словарь списков, используя метод defaultdict() в Python, и включим значения в списки, используя метод Append().
Синтаксис:
var_name = defaultdict(datatype)
- В этом разделе мы будем использовать defaultdict(list), поскольку нам нужно создать словарь списков Python.
Код:
from collections import defaultdict usa_info = defaultdict(list) usa_info['Cities'].append('Austin') usa_info['Cities'].append('Seattle') usa_info['States'].append('California') usa_info['States'].append('Texas') print(usa_info)
В приведенном выше коде мы создали словарь с именем «usa_info», которому назначили defaultdict(list). Затем мы добавляем названия городов, например «Остин» или «Сиэтл», в ключ «Cities» следующим образом: «usa_info[‘Cities’].append(‘Austin’)». \
Но в словаре нет такого ключа, как «Города», поэтому он должен выдать мне ошибку KeyError. Вместо получения KeyError он создает ключ с именем «Cities» и включает названия городов в список.
С использованием цикла for и метода update()
Мы также можем использовать цикл for с методом update() для создания словаря списков Python.
Цикл for будет полезен для перебора элементов обоих списков вместе, а затем мы включим его в словарь с помощью метода dict.update() в Python.
Давайте выполним код, чтобы понять, как можно создать словарь списков Python с помощью цикла for и метода обновления.
Синтаксис:
dict.update({key: value})
customer_purchase = {} customer_names = ["James", "Peter","John","George"] purchase_amount = [[50, 54, 76],[ 92, 89, 52], [67, 74, 85],[ 78, 56, 42]] for i in range(len(customer_names)): customer_purchase.update({customer_names[i]: purchase_amount[i]}) print(customer_purchase)
В приведенном выше коде у нас есть список имен клиентов и список списков сумм покупок за три дня. Теперь мне нужно создать словарь, в котором имена будут ключами, а сумма покупки за три дня должна быть значением.
Поэтому мы использовали цикл for, где инициализировали «i» и задавали range() как длину имен клиентов, например: for i in range(len(customer_names)). Затем мы использовали метод update(), чтобы добавить имена клиентов в качестве ключа и сумму покупки в виде списка значений, например: customer_purchase.update({customer_names[i]: Purchase_amount[i]})
С использованием метода setdefault()
Мы также можем использовать метод setdefault() для создания словаря списков Python. Этот метод принимает два параметра в качестве ключа и значения, чтобы добавить пару в словарь.
Итак, мы будем использовать этот метод, чтобы включить список в dict и добавить значения с помощью метода Append().
Синтаксис
dict.setdefault('key', []).append(value)
- Итак, мы будем использовать этот синтаксис для создания списка внутри словаря с помощью метода setdefault().
Пример создания словаря списков Python:
customer_purchase = {} purchase_amount = [76, 67, 81] for index in purchase_amount: customer_purchase.setdefault('James', []).append(index) print(customer_purchase)
В приведенном выше коде мы инициализировали пустой словарь, создали список Purchase_amount, а затем инициализировали цикл for, чтобы настроить таргетинг на все элементы суммы покупки. И используйте setdefault() следующим образом: customer_purchase.setdefault(‘James’, []).append(index), чтобы добавить «Джеймс» в качестве ключа и сумму покупки в качестве значения.
С использованием метода dict.fromkeys()
Мы можем использовать dict.fromkeys() для создания словаря списков Python. Он используется для создания нового словаря из коллекции ключей.
В ситуации, когда вам нужно присвоить одинаковые значения каждому ключу, вы можете использовать метод Python fromkeys().
Синтаксис:
dict.fromkeys(collection_of_keys, val)
- dict.fromkeys(collection_of_keys, value): метод fromkeys() будет работать только для словаря.
- (collection_of_keys, value): каждому ключу, который вы укажете в первом параметре, будет присвоено одно и то же значение.
keys = ['James', 'Adam', 'John'] values = [88, 79, 84] emp_data = dict.fromkeys(keys, []) for key in keys: emp_data[key] = values print(emp_data)
В приведенном выше коде у нас есть список ключей и значений, и нам нужно создать словарь списков, поэтому мы используем метод fromkeys(), где ключи будут переданы в первом параметре, а пустой список будет присваивается второму параметру следующим образом: emp_data = dict.fromkeys(keys, []).
Затем мы используем цикл for «для ключей в ключах», чтобы выбрать каждый элемент ключей и назначить один и тот же список значений каждому ключу emp_data[key] =values.
С использованием метода zip_longest()
Здесь мы будем использовать метод zip_longest() модуля itertools. В предыдущем примере мы видели, как можно присвоить одинаковые значения каждому ключу, но что, если мне нужны разные списки значений для каждого ключа?
Таким образом, метод zip_longest() будет полезен для получения разного списка значений в каждом ключе.
Синтаксис:
zip_longest(" collection_of_keys ", values, fill_value = [])
Вот пример создания словаря списков Python с использованием метода zip_longest().
from itertools import zip_longest keys = ['James', 'Adam', 'John'] values = [ [72, 63, 87], [56, 65, 69], [88, 79, 84] ] emp_data = dict(zip_longest(keys, values, fillvalue=[])) print(emp_data)
В приведенном выше коде у нас есть коллекция ключей и значений в виде вложенных списков. Нам нужно создать словарь списков Python, используя метод zip_longest().
Поэтому мы создаем переменную с именем emp_data, используя метод zip_longest() и передавая ключи и значения «zip_longest(keys,values,fillvalue=[])» в качестве ее параметра, с fill_value = [] в качестве необязательного параметра. Наконец, мы преобразуем его в словарь «dict(zip_longest(keys,values,fillvalue=[]))», используя метод Python dict().
Используя индекс
Здесь мы покажем вам самый простой способ создать словарь списков Python, напрямую назначив список клавишам словаря.
Синтаксис:
myDict["key"] = ["val_1 ", "val_2",. . . .]
Давайте разберемся на примере:
user_data = {} user_data["username_1"] = ["[email protected] ", "1234", 42] user_data["username_2"] = ["[email protected]", "7894", 56] print(user_data)
В приведенном выше коде мы создали пустой словарь с именем user_data, а затем присвоили словарю список, в котором ключом является имя пользователя, а другие данные, такие как адрес электронной почты, пароль и возраст, — в виде следующего списка: user_data[“username_1”] = [«[email protected]», «1234», 42].