Python – Dictionary get 방법

파이썬에서 딕셔너리 값을 가져올 때 사용하는 방법은 2가지로 볼 수 있다.

일단, Dictionary 표기는 다음과 같이 {key:value, key:value, ...} 형태로 표현된다. 중괄호를 쓰고 있다는 것을 명심하자. 난 이거 헷갈려

😊
리스트는 [ value, value, … ] – (가져오는 방법) *list\[1\]* 튜플은 (value, value, …) – *tuple\[1\]* 딕셔너리는 {key:value, key:value, …} – *dict\[key\]*

딕셔너리 요소 가져오기 – dict[key]

가장 기본적인 방법이다. 딕셔너리 이름에 키를 바로 적어줘서 값을 가져오는 방법이다.

>>> grade = {'pey': 10, 'julliet': 99}>>> grade['pey']10

키에 해당되는 아이템이 없으면 Exception 이 발생한다.

딕셔너리 요소 가져오기 – get()

get() 함수로 가져오는 방법도 있다.

>>> a = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}>>> a.get('name')'pey'

키에 해당되는 아이템이 없으면 그냥 None 리턴해 준다.

dict.get(key, default)

없을 때 원하는 기본 값을 설정할 수도 있다. 장점

차이점

위에 설명한 것처럼, Exception 이 싫다면 get() 함수를 반드시 사용해서 데이터를 가져오도록 하자.

>>> a = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}>>> print(a.get('nokey'))None>>> print(a['nokey'])Traceback (most recent call last):  File "<stdin>", line 1, in <module>KeyError: 'nokey'

참고사이트

  • 교과서 사이트
[
02-5 딕셔너리 자료형
[TOC] ## 딕셔너리란? 사람은 누구든지 이름 = 홍길동, 생일 = 몇 월 며칠 등으로 구별할 수 있다. 파이썬은 영리하게도 이러한 대응 관계를 나타낼 …
![](assets/images/2023/02/j2p_title_new2_S1JyeeE.jpg?ssl=1)
](https://wikidocs.net/16)

Django – ORM union 사용해보기

말로만 듣던 union() 을 사용해 보려 찾아본다. 사실은 쿼리셋 2개를 하나로 합치기 위해서 찾아봄. 아래 링크에서 정답을 찾을 수 있고, union 부분만 발췌

[
[Django] queryset 결과 합치기
합칠 대상의 결과가 2개 이상인 경우 union() union()를 사용해서 1개로 합칠 수 있습니다. union()의 2번째 인자는 중복을 허용할지에 대한 여부인데 기본값은 False로 중복을 허용하지 않습니다. (중복데이터일..
![](assets/images/2023/02/opengraph.png?ssl=1)
](https://brownbears.tistory.com/426)

union()를 사용해서 1개로 합칠 수 있습니다. union()의 2번째 인자는 중복을 허용할지에 대한 여부인데 기본값은 False로 중복을 허용하지 않습니다. (중복데이터일 경우 중복제거)

result = a.union(b, all=True)

그냥 장고 파이썬 코드에서 (ORM이 아닌) 쿼리셋 결과들끼리 | 연산자로 합쳐도 된다고 하네요.

result = a | b

@vdekr9

Django – ORM values, values_list, list 결과

맨날 헷갈리는데 ORM Queryset 의 결과를 리스트로 받아 쓰는 경우가 많아 values(), values_list(), list()를 자주 쓰게 되는데 확실히 결과가 어떻게 다른지 알아보자.

말보단 코드를 짜서 결과를 보고 비교해 보는 게 확실히 이해하는데 크게 도움이 된다.

    result_by_orderitem = Result.objects.filter(starttime__year=s_year).order_by("orderitem", "-starttime").distinct("orderitem").values("orderitem")    print(result_by_orderitem)    result_by_orderitem = Result.objects.filter(starttime__year=s_year).order_by("orderitem", "-starttime").distinct("orderitem").values_list("orderitem")    print(result_by_orderitem)    result_by_orderitem = Result.objects.filter(starttime__year=s_year).order_by("orderitem", "-starttime").distinct("orderitem").values_list("orderitem", flat=True)    print(result_by_orderitem)    result_by_orderitem = list(result_by_orderitem)    print(result_by_orderitem)

예제로 짠 파이썬 코드의 결과를 보면,

<QuerySet [{'orderitem': 278}, {'orderitem': 279}, {'orderitem': 280}, {'orderitem': 284}, {'orderitem': 287}, {'orderitem': 288}]><QuerySet [(278,), (279,), (280,), (284,), (287,), (288,)]><QuerySet [278, 279, 280, 284, 287, 288]>[278, 279, 280, 284, 287, 288]

values 는 {필드명:값} 형태의 딕셔너리 형태의 Queryset 의 리스트 형태로 리턴 되어 있고

values_list 는 필드명을 지정해 둬서 튜플 형태의 (값, 값, …) 의 Queryset 리스트로 리턴되고,

plat=True 옵션을 주면 튜플 형태가 없어지고 그냥 값들의 리스트 형태와 유사한 Queryset 리스트를 리턴하고,

맨 마지막 값을 그냥 list(queryset) 형태로 호출하면, 그냥 순수한 값들의 리스트로 리턴되고 있음을 볼 수 있다.

..@vdekr9