[python] 목록 이해력이있는 사전 만들기

나는 파이썬 목록 이해 구문을 좋아합니다.

사전을 만드는 데에도 사용할 수 있습니까? 예를 들어, 키와 값 쌍을 반복함으로써 :

mydict = {(k,v) for (k,v) in blah blah blah}  # doesn't work



답변

Python 2.7 및 3부터 dict comprehension 구문을 사용해야 합니다 .

{key: value for (key, value) in iterable}

Python 2.6 및 이전 버전에서 dict내장은 반복 가능한 키 / 값 쌍을 수신 할 수 있으므로 목록 이해 또는 생성기 표현식을 전달할 수 있습니다. 예를 들면 다음과 같습니다.

dict((key, func(key)) for key in keys)

그러나 이미 반복 가능한 키 및 / 또는 val이 있다면 이해를 전혀 사용할 필요가 없습니다. 가장 간단한 것은 dict내장을 직접 호출하는 것입니다 .

# consumed from any iterable yielding pairs of keys/vals
dict(pairs)

# "zipped" from two separate iterables of keys/vals
dict(zip(list_of_keys, list_of_values))


답변

Python 3 및 Python 2.7+에서 사전 이해는 다음과 같습니다.

d = {k:v for k, v in iterable}

Python 2.6 이하 의 경우 fortran의 답변을 참조하십시오 .


답변

사실, 이미 일종의 매핑을 이해하고 있다면 dict 생성자가 당신을 위해 은혜롭게 수행하는 경우 iterable을 반복 할 필요조차 없습니다.

>>> ts = [(1, 2), (3, 4), (5, 6)]
>>> dict(ts)
{1: 2, 3: 4, 5: 6}
>>> gen = ((i, i+1) for i in range(1, 6, 2))
>>> gen
<generator object <genexpr> at 0xb7201c5c>
>>> dict(gen)
{1: 2, 3: 4, 5: 6}


답변

Python 2.7에서는 다음과 같이 진행됩니다.

>>> list1, list2 = ['a', 'b', 'c'], [1,2,3]
>>> dict( zip( list1, list2))
{'a': 1, 'c': 3, 'b': 2}

그들을 압축 !


답변

파이썬에서 목록 이해력을 가진 사전 만들기

나는 파이썬 목록 이해 구문을 좋아합니다.

사전을 만드는 데에도 사용할 수 있습니까? 예를 들어, 키와 값 쌍을 반복함으로써 :

mydict = {(k,v) for (k,v) in blah blah blah}

“dict comprehension”이라는 구절을 찾고 있습니다. 실제로는 다음과 같습니다.

mydict = {k: v for k, v in iterable}

blah blah blah두 튜플의 반복 가능하다고 가정하면 너무 가깝습니다. 그런 “블라”를 만들어 봅시다 :

blahs = [('blah0', 'blah'), ('blah1', 'blah'), ('blah2', 'blah'), ('blah3', 'blah')]

독해 이해 구문 :

이제 구문은 매핑 부분입니다. 이것을 dict이해하는 대신 set이해하는 것은 (의사 코드 근사치 인) 콜론입니다. :아래와 같이 :

mydict = {k: v for k, v in blahs}

그리고 우리는 그것이 효과가 있었고 Python 3.7부터 삽입 순서를 유지해야한다는 것을 알았습니다.

>>> mydict
{'blah0': 'blah', 'blah1': 'blah', 'blah2': 'blah', 'blah3': 'blah'}

파이썬 2에서 3.6까지는 순서가 보장되지 않았습니다.

>>> mydict
{'blah0': 'blah', 'blah1': 'blah', 'blah3': 'blah', 'blah2': 'blah'}

필터 추가 :

모든 이해에는 임의의 식을 제공 할 수있는 매핑 구성 요소와 필터링 구성 요소가 있습니다.

따라서 필터 부분을 끝에 추가 할 수 있습니다.

>>> mydict = {k: v for k, v in blahs if not int(k[-1]) % 2}
>>> mydict
{'blah0': 'blah', 'blah2': 'blah'}

여기서 우리는 키와 값을 매핑하기 전에 데이터를 필터링하기 위해 마지막 문자를 2로 나눌 수 있는지 테스트하고 있습니다.


답변

Python 버전 <2.7 (RIP, 2010 년 7 월 3 일-2019 년 12 월 31 일) , 다음을 수행하십시오.

d = dict((i,True) for i in [1,2,3])

파이썬 버전> = 2.7, 아래를 수행하십시오 :

d = {i: True for i in [1,2,3]}


답변

key_list목록과 값 목록을 반복하려면 @fortran의 답변에 추가하십시오 value_list.

d = dict((key, value) for (key, value) in zip(key_list, value_list))

또는

d = {(key, value) for (key, value) in zip(key_list, value_list)}