Python Dictionary(Python Document)는 키-값(key-value) 쌍으로 데이터를 저장하는 데이터 구조입니다(Python 3.7 이후부터 삽입 순서가 보장된다고 합니다.).

제가 생각하는 데이터 타입 중 가장 편하게 다양하게 쓸수 있는 데이터 타입으로 생각됩니다. 저는 상용 프로그램이 아닌 그때 그때 실행해서 쓰는 조각 코드에서는 list 보다 Dictionary를 사용하고 있습니다. 확실히 더 편하고 여러가지로 활용하기 좋은 것 같습니다.

DB에 넣기 전에 임시로 사용하기도 했었습니다. 굳이 쓸 필요 없는데 사용했던 것 같아 더 간단한 list나 tuple 보다 먼저 작성해봅니다.

장점

  1. 빠른 데이터 접근 : 키를 통해 O(1) 시간 복잡도로 값에 접근 가능
  2. 유연성 : 다양한 자료형을 값으로 저장 가능
  3. 가독성 : 키-값 구조로 의미를 명확히 표현
  4. 동적 관리 : 요소 추가, 삭제, 수정이 용이

단점

  1. 메모리 사용량 : 해시 테이블 구조로 인해 리스트보다 메모리 사용이 큼
  2. 키 제한 : 키는 반드시 해시 가능한 자료형이어야 함
  3. 순서 변경 불가능 : 키 순서를 변경하거나 직접 조작할 수 없음
  4. 중복 키 불가 : 동일한 키를 중복 정의하면 마지막 값만 유지

Dictionary Code

my_dict = {
    "name": "CIL",
    "age": 1,
    "site": "Blogger"
}
print(my_dict["name"]) # output : CIL
print(my_dict["age"]) # output : 1

# Add Value
my_dict["email"] = "cil@blogger.com"

# Edit Value
my_dict["age"] = 2

# delete Key:value
del my_dict["site"]

print(my_dict) # output : {'name': 'CIL', 'age': 2, 'email': 'cil@blogger.com'}

for key in my_dict:
    print(key)

for value in my_dict.values():
    print(value)

for key, value in my_dict.items():
    print(f"{key}: {value}")

keys = my_dict.keys()
print(keys) # output : dict_keys(['name', 'age', 'email'])

values = my_dict.values()
print(values) # output : dict_values(['CIL', 2, 'cil@blogger.com'])

items = my_dict.items()
print(items)
# output : dict_items([('name', 'CIL'), ('age', 2), ('email', 'cil@blogger.com')])

if "name" in my_dict:
    print("Name in dictionary")

major = my_dict.get("major", "Undeclared")
print(major) # output : Undeclared

# default key
graduation_year = my_dict.setdefault("graduation_year", 2024)
print(graduation_year)  # output : 2024
print(my_dict)
# output : {'name': 'CIL', 'age': 2, 'email': 'cil@blogger.com',
# 'graduation_year': 2024}
text = "hello world hello"
word_count = {}
for word in text.split():
    word_count[word] = word_count.get(word, 0) + 1
print(word_count)
# {'hello': 2, 'world': 1}

Output

CIL
1
{'name': 'CIL', 'age': 2, 'email': 'cil@blogger.com'}
name
age
email
CIL
2
cil@blogger.com
name: CIL
age: 2
email: cil@blogger.com
dict_keys(['name', 'age', 'email'])
dict_values(['CIL', 2, 'cil@blogger.com'])
dict_items([('name', 'CIL'), ('age', 2), ('email', 'cil@blogger.com')])
Name in dictionary
Undeclared
2024
{'name': 'CIL', 'age': 2, 'email': 'cil@blogger.com', 'graduation_year': 2024}
{'hello': 2, 'world': 1}

Dictionary 를 이야기 하면 상당히 많은 메모리를 사용하는 구조라고 합니다.

개인적으로 뉴스의 타이틀 분석시 단어에 대한 유사도를 비교 분석해보기 위해서 Tensor를 사용해야 됬습니다. 이를 사용해보려고 Pytorch나 Tensorflow를 사용하려고 했는데 프로그램이 너무 무거워서 Dictionary 를 이용해서 비슷하게 만들었던 기억이 있습니다.

그런데 지금 생각해보면 이것도 메모리를 많이 사용하다 보니 프로그램이 무거워진것은 똑 같았던 것 같습니다.

단어를 벡터화하여 유사도 비교는 백터 스페이스를 사용하거나 Normed, Hilbert 등 여러가지 기법이 있는데 여기서 할 이야기는 아닌 것 같습니다.

By Mark

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다