logo

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

지금까지 우리는 다양한 방법으로 사전을 생성하는 방법과 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은 가장 긴 목록의 길이입니다.
보조 공간: 에)