Python | Способи створення словника Списків
Досі ми бачили способи створення словника різними способами та різними операціями над ключами та значеннями в Python словник . Тепер давайте розглянемо різні способи створення словника списків. Зверніть увагу, що обмеження з ключами в Python словник лише незмінні типи даних можна використовувати як ключі, що означає, що ми не можемо використовувати словник списків як ключ.
приклад :
Input: myDict = {} myDict['key1'] = [1, 2] # Adding list as value myDict['key2'] = ['Geeks', 'For', 'Geeks'] Output: {'key2': ['Geeks', 'For', 'Geeks'], 'key1': [1, 2]} Explanation: In the output, we have a dictionary of lists. Постановка проблеми
Загалом ми отримуємо помилку типу, якщо намагаємось реалізувати її звичайним способом.
Python3
# Creating a dictionary> myDict> => {[> 1> ,> 2> ]:> 'Geeks'> }> print> (myDict)> |
Вихід:
TypeError: unhashable type: 'list'
Але те ж саме можна зробити дуже мудро зі значеннями в словнику. Давайте розглянемо всі різні способи створення словника списків.
Способи створення словника списків
Нижче наведено теми, які ми розглянемо в цій статті:
- Використання нижній індекс
- Використовуючи метод append().
- Використовуючи метод setdefault().
- Використання розуміння списку
- Використання defaultdict
- Використання Json.dumb() метод
- Використання модуль itertools
Створіть словник списків, використовуючи індекс
Цей код ініціалізує порожній словник myDict> . Потім він додає дві пари ключ-значення до словника: 'key1'> зі значенням [1, 2]> , і 'key2'> зі значенням ['Geeks', 'For', 'Geeks']> . Нарешті, код друкує вміст словника.
Python3
# Creating an empty dictionary> myDict> => {}> # Adding list as value> myDict[> 'key1'> ]> => [> 1> ,> 2> ]> myDict[> 'key2'> ]> => [> 'Geeks'> ,> 'For'> ,> 'Geeks'> ]> print> (myDict)> |
Вихід:
{'key2': ['Geeks', 'For', 'Geeks'], 'key1': [1, 2]} Часова складність: O(1) для кожної вставки словника та друку словника.
Допоміжні приміщення: O(n), де n – загальна кількість елементів у словнику.
Створіть словник списків за допомогою методу append().
Додавання вкладеного списку як значення за допомогою метод append(). Створіть новий список, і ми зможемо просто додати цей список до значення.
Python3
# Creating an empty dictionary> myDict> => {}> # Adding list as value> myDict[> 'key1'> ]> => [> 1> ,> 2> ]> # creating a list> lst> => [> 'Geeks'> ,> 'For'> ,> 'Geeks'> ]> # Adding this list as sublist in myDict> myDict[> 'key1'> ].append(lst)> print> (myDict)> |
Вихід:
{'key1': [1, 2, ['Geeks', 'For', 'Geeks']]} Часова складність: O(1).
Складність допоміжного приміщення: O(n).
Створіть словник списків за допомогою методу setdefault().
Повторюйте список і продовжуйте додавати елементи до вказаного діапазону за допомогою метод setdefault().
Python3
# Creating an empty dict> myDict> => dict> ()> # Creating a list> valList> => [> '1'> ,> '2'> ,> '3'> ]> # Iterating the elements in list> for> val> in> valList:> > for> ele> in> range> (> int> (val),> int> (val)> +> 2> ):> > myDict.setdefault(ele, []).append(val)> print> (myDict)> |
Вихід:
{1: ['1'], 2: ['1', '2'], 3: ['2', '3'], 4: ['3']} Часова складність: O(n^2)
Складність простору: O(n)
Створення словника списків за допомогою List Comprehension
в розуміння списку ми повторюємо значення '1'> , '2'> , і '3'> , і для кожного значення створюється пара ключ-значення в словнику. Ключ — це поточне значення, а значення — це діапазон цілих чисел, починаючи від значення, перетвореного на ціле число, і закінчуючи значенням плюс 1.
Python
# Creating a dictionary of lists using list comprehension> d> => dict> ((val,> range> (> int> (val),> int> (val)> +> 2> ))> > for> val> in> [> '1'> ,> '2'> ,> '3'> ])> print> (d)> |
Вихід:
{'1': [1, 2], '3': [3, 4], '2': [2, 3]} Часова складність: O(1).
Складність допоміжного приміщення: O(n).
Створення словника списків за допомогою defaultdict
Імпортуйте defaultdict клас із модуля колекцій. Визначте список кортежів lst, кожен з яких містить пару ключ-значення. Створіть об’єкт defaultdict під назвою orDict, який матиме стандартні значення порожнього списку. Перегляньте список кортежів спочатку за допомогою циклу for і розпакуйте кожен кортеж у змінні key і val. Додайте значення val до списку, пов’язаного з ключем у словнику orDict.
Роздрукуйте отриманий словник або словник Dict.
Примітка : Те саме можна зробити за допомогою простого словника, але використання defaultdict є більш ефективним у таких випадках.
Python3
from> collections> import> defaultdict> lst> => [(> 'Geeks'> ,> 1> ), (> 'For'> ,> 2> ), (> 'Geeks'> ,> 3> )]> orDict> => defaultdict(> list> )> # iterating over list of tuples> for> key, val> in> lst:> > orDict[key].append(val)> print> (orDict)> |
Вихід:
defaultdict(, {'For': [2], 'Geeks': [1, 3]}) Часова складність: O(n).
Допоміжний простір: O(n).
Зауважте, що у вихідному словнику є лише дві пари ключ: значення, але вхідний список містить три кортежі. Перший елемент (тобто ключ) однаковий для першого та третього кортежів, і два ключі ніколи не можуть бути однаковими.
Створення словника списків за допомогою Json
Шляхом імпорту json> модуль. Він ініціалізує список lst> що містить кортежі. Потім порожній словник dict> ініціалізується. Код перетворює список lst> у рядок у форматі JSON використовуючи json.dumps()> , і призначає цей рядок як ключ у словнику dict> із перетвореним значенням. Нарешті словник надруковано.
Python3
#importing json> import> json> #Initialisation of list> lst> => [(> 'Geeks'> ,> 1> ), (> 'For'> ,> 2> ), (> 'Geeks'> ,> 3> )]> #Initialisation of dictionary> dict> => {}> #using json.dump()> hash> => json.dumps(lst)> #creating a hash> dict> [> hash> ]> => 'converted'> #Printing dictionary> print> (> dict> )> |
Вихід:
{'[['Geeks', 1], ['For', 2], ['Geeks', 3]]': 'converted'} Часова складність: O(n), де n — довжина першого списку.
Допоміжні приміщення: O(n), де n — довжина першого списку.
Створення словника списків за допомогою itertools
Одним із підходів є використання функції zip_longest із модуль itertools. Ця функція дозволяє вам паралельно повторювати два або більше ітерованих елементів, заповнюючи будь-які відсутні елементи зазначеним значенням заповнення.
Python3
from> itertools> import> zip_longest> # Initialize the lists> list1> => [> 1> ,> 2> ,> 3> ]> list2> => [> 10> ,> 20> ,> 30> ,> 40> ]> list3> => [> 'a'> ,> 'b'> ,> 'c'> ,> 'd'> ,> 'e'> ]> # Use zip_longest to iterate over the lists in parallel> d> => {}> for> elem1, elem2, elem3> in> zip_longest(list1, list2, list3, fillvalue> => 0> ):> > d.setdefault(elem1, []).append(elem2)> > d.setdefault(elem1, []).append(elem3)> print> (d)> # Output: {1: [10, 'a'], 2: [20, 'b'], 3: [30, 'c'], 0: [40, 'd']}> |
Вихід
{1: [10, 'a'], 2: [20, 'b'], 3: [30, 'c'], 0: [40, 'd', 0, 'e']} Часова складність: O(n), де n – довжина найдовшого списку.
Допоміжні приміщення: O(n)