Работая над проектом Python, я столкнулся с необходимостью хранить пользовательские данные, такие как имя пользователя, адрес электронной почты, пароль и возраст, в словарном типе данных (пара ключ-значение).

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

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

Итак, перед созданием словаря у нас есть такие данные:

username_1 = ['email', 'password', 'age']
username_2 = ['email', 'password', 'age']

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

users_data = {
    "username_1" : ['email', 'password','age'],
    "username_2" : ['email', 'password','age'],
}
Содержание

Используя словарные литералы

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

Синтаксис:

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)

Как создать словарь списков в Python, используя словарные литералы

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

Итак, мы создаем список рейтингов непосредственно внутри словаря сотрудника_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)

Используя методы dict() и zip()

В приведенном выше коде у нас есть два разных списка с именами 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)

Как создать список Python с использованием метода defaultdict()

В приведенном выше коде мы создали словарь с именем «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 и метода update()

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

Поэтому мы использовали цикл 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)

Списки в словаре Python с использованием метода setdefault()

В приведенном выше коде мы инициализировали пустой словарь, создали список 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)

Словарь списков Python с использованием метода dict.fromkeys()

В приведенном выше коде у нас есть список ключей и значений, и нам нужно создать словарь списков, поэтому мы используем метод 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)

с использованием метода zip_longest()

В приведенном выше коде у нас есть коллекция ключей и значений в виде вложенных списков. Нам нужно создать словарь списков 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].

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