logo

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'>

Але те ж саме можна зробити дуже мудро зі значеннями в словнику. Давайте розглянемо всі різні способи створення словника списків.

Способи створення словника списків

Нижче наведено теми, які ми розглянемо в цій статті:

перетворити дату на рядок

Створіть словник списків, використовуючи індекс

Цей код ініціалізує порожній словник 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)