Pythona | Sposoby tworzenia słownika list
Do tej pory widzieliśmy sposoby tworzenia słownika na wiele sposobów i różnych operacji na kluczu i wartościach w Pythonie słownik . Przyjrzyjmy się teraz różnym sposobom tworzenia słownika list. Należy pamiętać, że ograniczenie dotyczące kluczy w pliku Pyton Jako kluczy można używać wyłącznie niezmiennych typów danych, co oznacza, że nie możemy używać słownika list jako klucza.
Przykład :
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. Oświadczenie o problemie
Zwykle dostajemy typrerror, jeśli próbujemy go zaimplementować w normalny sposób.
Python3
# Creating a dictionary> myDict> => {[> 1> ,> 2> ]:> 'Geeks'> }> print> (myDict)> |
Wyjście:
TypeError: unhashable type: 'list'
Ale to samo można zrobić bardzo mądrze z wartościami w słowniku. Przyjrzyjmy się różnym sposobom tworzenia słownika list.
Sposoby tworzenia słownika list
Poniżej znajdują się tematy, które omówimy w tym artykule:
- Za pomocą indeks
- Używając metoda dołączania().
- Używając metoda setdefault().
- Za pomocą zrozumienie listy
- Za pomocą wyrok domyślny
- Za pomocą Json.głupi() metoda
- Za pomocą moduł itertools
Utwórz słownik list za pomocą indeksu dolnego
Ten kod inicjuje pusty słownik myDict> . Następnie dodaje do słownika dwie pary klucz-wartość: 'key1'> z wartością [1, 2]> , I 'key2'> z wartością ['Geeks', 'For', 'Geeks']> . Na koniec kod wypisuje zawartość słownika.
Python3
# Creating an empty dictionary> myDict> => {}> # Adding list as value> myDict[> 'key1'> ]> => [> 1> ,> 2> ]> myDict[> 'key2'> ]> => [> 'Geeks'> ,> 'For'> ,> 'Geeks'> ]> print> (myDict)> |
Wyjście:
{'key2': ['Geeks', 'For', 'Geeks'], 'key1': [1, 2]} Złożoność czasowa: O(1) dla każdego wstawienia słownika i wydrukowania słownika.
Przestrzeń pomocnicza: O(n), gdzie n jest całkowitą liczbą elementów w słowniku.
Utwórz słownik list za pomocą metody append().
Dodawanie zagnieżdżonej listy jako wartości za pomocą metoda dołączania(). Utwórz nową listę, a my będziemy mogli po prostu dołączyć tę listę do wartości.
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)> |
Wyjście:
{'key1': [1, 2, ['Geeks', 'For', 'Geeks']]} Złożoność czasowa: O(1).
Złożoność przestrzeni pomocniczej: NA).
Utwórz słownik list, korzystając z metody setdefault().
Iteruj listę i dodawaj elementy aż do podanego zakresu, używając metoda 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)> |
Wyjście:
{1: ['1'], 2: ['1', '2'], 3: ['2', '3'], 4: ['3']} Złożoność czasowa: O(n^2)
Złożoność przestrzeni: NA)
Tworzenie słownika list przy użyciu funkcji List Comprehension
W zrozumienie listy iterujemy po wartościach '1'> , '2'> , I '3'> i dla każdej wartości tworzy w słowniku parę klucz-wartość. Kluczem jest bieżąca wartość, a wartość jest zakresem liczb całkowitych zaczynającym się od wartości przekonwertowanej na liczbę całkowitą i kończącym się na wartości plus 1.
Pyton
# 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)> |
Wyjście:
{'1': [1, 2], '3': [3, 4], '2': [2, 3]} Złożoność czasowa: O(1).
Złożoność przestrzeni pomocniczej: NA).
Tworzenie słownika list przy użyciu defaultdict
Zaimportuj wyrok domyślny class z modułu kolekcji. Zdefiniuj listę krotek lst, przy czym każda krotka zawiera parę klucz-wartość. Utwórz obiekt defaultdict o nazwie orDict, który będzie miał domyślne wartości pustej listy. Wykonaj iterację po liście krotek, używając pętli for i rozpakuj każdą krotkę do zmiennych key i val. Dołącz wartość val do listy powiązanej z kluczem w słowniku orDict.
Wydrukuj wynikowy słownik lub Dict.
Notatka : To samo można zrobić za pomocą prostego słownika, ale w takich przypadkach użycie defaultdict jest bardziej efektywne.
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)> |
Wyjście:
defaultdict(, {'For': [2], 'Geeks': [1, 3]}) Złożoność czasowa: O(n).
Przestrzeń pomocnicza: O(n).
Zauważ, że w słowniku wyjściowym znajdują się tylko dwie pary klucz:wartość, ale lista wejściowa zawiera trzy krotki. Pierwszy element (tj. klucz) jest taki sam dla pierwszej i trzeciej krotki, a dwa klucze nigdy nie mogą być takie same.
Tworzenie słownika list przy użyciu Jsona
Importując plik json> moduł. Inicjuje listę lst> zawierające krotki. Potem pusty słownik dict> jest inicjowany. Kod konwertuje listę lst> na ciąg w formacie JSON za pomocą json.dumps()> i przypisuje ten ciąg jako klucz w słowniku dict> z przeliczoną wartością. Na koniec słownik jest drukowany.
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> )> |
Wyjście:
{'[['Geeks', 1], ['For', 2], ['Geeks', 3]]': 'converted'} Złożoność czasowa: O(n), gdzie n jest długością listy lst.
Przestrzeń pomocnicza: O(n), gdzie n jest długością listy lst.
Tworzenie słownika list przy użyciu itertools
Jednym z podejść jest użycie funkcji zip_longest z pliku moduł itertools. Ta funkcja umożliwia równoległą iterację po dwóch lub większej liczbie iteracji, wypełniając brakujące elementy określoną wartością wypełnienia.
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']}> |
Wyjście
{1: [10, 'a'], 2: [20, 'b'], 3: [30, 'c'], 0: [40, 'd', 0, 'e']} Złożoność czasowa: O(n), gdzie n jest długością najdłuższej listy.
Przestrzeń pomocnicza: NA)