파이썬 | 목록 사전을 만드는 방법

지금까지 우리는 다양한 방법으로 사전을 생성하는 방법과 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. 

문제 설명

일반적인 방법으로 구현하려고 하면 일반적으로 typrerror가 발생합니다.

파이썬3




# Creating a dictionary> myDict> => {[> 1> ,> 2> ]:> 'Geeks'> }> print> (myDict)>

산출:

TypeError: unhashable type: 'list' 

그러나 사전에 있는 값을 사용하여 동일한 작업을 매우 현명하게 수행할 수 있습니다. 목록 사전을 만들 수 있는 다양한 방법을 모두 살펴보겠습니다.

목록 사전을 만드는 방법

이 기사에서 다룰 주제는 다음과 같습니다.

아래 첨자를 사용하여 목록 사전 만들기

이 코드는 빈 항목을 초기화합니다. 사전 myDict> . 그런 다음 두 개의 키-값 쌍을 사전에 추가합니다. 'key1'> 가치와 함께 [1, 2]> , 그리고 'key2'> 가치와 함께 ['Geeks', 'For', 'Geeks']> . 마지막으로 코드는 사전의 내용을 인쇄합니다.

파이썬3




# 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() 메서드를 사용하여 목록 사전 만들기

다음을 사용하여 중첩 목록을 값으로 추가 추가() 메소드. 새 목록을 생성하면 해당 목록을 값에 간단히 추가할 수 있습니다.

파이썬3




# 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']]} 

시간 복잡도: 오(1).
보조 공간 복잡성: 에).

setdefault() 메서드를 사용하여 목록 사전 만들기

목록을 반복하고 다음을 사용하여 주어진 범위까지 요소를 계속 추가합니다. setdefault() 메소드.

파이썬3




# 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']} 

시간 복잡도 : 오(n^2)
공간 복잡도 : 에)

List Comprehension을 사용하여 목록 사전 만들기

~ 안에 목록 이해 우리는 값을 반복합니다 '1'> , '2'> , 그리고 '3'> , 각 값에 대해 사전에 키-값 쌍을 생성합니다. 키는 현재 값이고, 값은 정수로 변환된 값부터 시작하여 값에 1을 더한 값으로 끝나는 정수 범위입니다.

파이썬




# 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]} 

시간 복잡도: 오(1).
보조 공간 복잡성: 에).

defaultdict를 사용하여 목록 사전 만들기

가져오기 불이행 컬렉션 모듈의 클래스입니다. 키-값 쌍을 포함하는 각 튜플을 사용하여 먼저 튜플 목록을 정의합니다. 빈 목록의 기본값을 갖는 orDict라는 defaultdict 개체를 만듭니다. for 루프를 사용하여 먼저 튜플 목록을 반복하고 각 튜플을 key 및 val 변수에 압축을 풉니다. orDict 사전의 키와 연결된 목록에 값 val을 추가합니다.

결과 또는 Dict 사전을 인쇄합니다.

메모 : 간단한 사전으로도 동일한 작업을 수행할 수 있지만 이러한 경우에는 defaultdict를 사용하는 것이 더 효율적입니다.

파이썬3




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> 값이 변환되었습니다. 마지막으로 사전이 인쇄됩니다.

파이썬3




#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

한 가지 접근 방식은 itertools 모듈. 이 함수를 사용하면 두 개 이상의 반복 가능 항목을 병렬 방식으로 반복하여 누락된 요소를 지정된 채우기 값으로 채울 수 있습니다.

파이썬3




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은 가장 긴 목록의 길이입니다.
보조 공간: 에)