지금까지 우리는 다양한 방법으로 사전을 생성하는 방법과 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'>
그러나 사전에 있는 값을 사용하여 동일한 작업을 매우 현명하게 수행할 수 있습니다. 목록 사전을 만들 수 있는 다양한 방법을 모두 살펴보겠습니다.
목록 사전을 만드는 방법
이 기사에서 다룰 주제는 다음과 같습니다.
- 사용 아래 첨자
- 사용하여 추가() 메서드
- 사용하여 setdefault() 메서드
- 사용 목록 이해
- 사용 불이행
- 사용 JSON.dumb() 방법
- 사용 itertools 모듈
아래 첨자를 사용하여 목록 사전 만들기
이 코드는 빈 항목을 초기화합니다. 사전 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은 가장 긴 목록의 길이입니다.
보조 공간: 에)