Python/2.7 information

python 딕셔너리에 관하여, 파이써닉하게 코드 짜기

qkqhxla1 2016. 11. 24. 11:39

http://khanrc.tistory.com/entry/PyCon-%EC%9C%84%EB%8C%80%ED%95%9C-dict-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B3%A0-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0


에서 내용을 가져와서 정리했습니다. 


문제시 바로 삭제하겠습니다 댓글달아주세요!.


파이썬의 기본 문법에 대해서는 진짜 거의 모르는게 없다고 생각했는데... 저 블로그를 보면서


아직 부족함을 느꼈습니다.


1. 키와 값 바꾸기. 


간단하게 아래와 같은 딕셔너리 컴프리핸션 으로 되네요... 리스트로 만들어서 dict()함수로 덮어씌우고 그랬었는데..

# -*- encoding: cp949 -*-
a = {'a': 1, 'c': 3, 'b': 2}
print {v: k for k, v in a.iteritems()}

2. 넣은 순서대로 들어가는 OrderedDict.


아래 코드의 위와 아래를 비교해 보면 알겠지만 아래의 OrderedDict는 넣은 순서대로 값이 출력됩니다.


그런데 처음에 딱 보고 든 생각은 키나 값을 중점으로 정렬되서 값이 나오는건가?? 했는데


애초에 그렇게 집어넣으려면 딕셔너리가 정렬되어 있어야 하고 삽입시 이분탐색 등으로 찾아서 넣는 등..


되게 복잡해질걸 예상못했네요..(그리고 딕셔너리가 해쉬라서 이게 안된다는걸 또 깨달음.)


그냥 순서대로 넣으면 그 순서대로 나오는겁니다.

# -*- encoding: cp949 -*-
d={}
d['a'] = 1
d['d'] = 4
d['c'] = 3
d['b'] = 2
print d

from collections import OrderedDict
d = OrderedDict()
d['a'] = 1
d['d'] = 4
d['c'] = 3
d['b'] = 2
print d.items()

3. 기본 값을 지정해줄수 있는 defaultdict.


사실 이것때문에 글을 쓴건데... 되게 유용해보입니다. 딕셔너리를 만드는데 모든 키에 대해서 값을


디폴트로 안에 인자로 넣은 것으로 초기화해줍니다. 그래서 아래처럼 키 'd'에 값을 할당 안해줬는데도


그냥 출력해보면 출력한 결과가 나옵니다. 

# -*- encoding: cp949 -*-
from collections import defaultdict
d = defaultdict(lambda: [])
d['a'].append(1)
print d['a']
print d['d']

print;print

#사전으로 구현한다면
d={}
d['a'] = [1]
print d['a']
if 'd' not in d:
    d['d'] = []
print d['d']

그냥 사전으로 프로그래밍하는것보다 훨씬 깔끔한 프로그래밍이 가능할듯.


아래는 상상도 못한 코드 ㅋㅋㅋ 재귀 사전이라고 불러야 맞을 것 같습니다. 위 사이트에서 가져왔습니다.

# -*- encoding: cp949 -*-
from collections import defaultdict
infinite_dict = lambda: defaultdict(infinite_dict)
inf = infinite_dict()
inf['a'] = 1
inf['b']['c'] = 2
inf['c']['d']['e'] = 3
print inf

아래는 파이썬답게 코드 짜는 법을 다룬 포스팅. c나 c++만 하게 되면 어느 문제를 해결하는 법에 대해서


코딩적으로 머리가 굳곤 하는데 파이썬을 이용하면 신세계를 맛볼 수 있다.


http://friberry.com/?p=162