문제

내가 좋아하는 파이썬 목록해 구문입니다.

사용할 수 있을 만드는 사전나요?예를 들어,반복하여 쌍을 통해 키와 값을 사용:

mydict = {(k,v) for (k,v) in blah blah blah}  # doesn't work
도움이 되었습니까?

해결책

Python 2.7과 3에서 DICT 이해력 구문:

{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 이하의 경우 참조하십시오 포트란의 대답.

사실, 당신은 이미 일종의 매핑을 이해한다면 반복 가능한 것을 반복 할 필요조차 없습니다.

>>> 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}

그들을 지퍼!

@Fortran의 답변에 추가하려면 키 목록을 반복하려면 key_list 값 목록뿐만 아니라 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)}

파이썬에서 목록 이해력이있는 사전을 만듭니다

나는 Python List Comprehension 구문을 좋아합니다.

사전을 만드는 데 사용될 수 있습니까? 예를 들어, 키와 값 쌍을 반복하여 다음과 같습니다.

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

당신은 "Dictnehrension"이라는 문구를 찾고 있습니다 - 그것은 실제로 다음과 같습니다.

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

이것은 blah blah blah를 제외하고는 거의 유효합니다.

mydict = {(k,v) for (k,v) in blah blah blah}
                                 ^^^^^^--invalid syntax

가정합니다 blah blah blah 두 가지를 반복 할 수있는 반복적입니다 - 당신은 너무 가깝습니다. 다음과 같은 "blahs"를 만들어 봅시다.

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

DICT PLERHENSION 구문 :

이제 여기의 구문은 매핑 부분입니다. 이게 무엇을 만드는가 dict a 대신 이해력이 있습니다 set 이해력 (의사 코드가 근사하는 것)은 결장입니다. : 아래처럼 :

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

그리고 우리는 그것이 효과가 있었고, 삽입 순서를 보유하여 파이썬 3.7을 유지해야합니다.

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

Python 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 씩 나눌 수 있는지 테스트하고 키와 값을 매핑하기 전에 데이터를 걸러냅니다.

파이썬 버전 <2.7, 다음을 수행하십시오.

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

파이썬 버전> = 2.7, 다음을 수행하십시오.

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

다음은 DICT 이해력을 사용한 사전 생성의 또 다른 예입니다.

내가 여기서해야 할 일은 각 쌍의 알파벳 사전을 만드는 것입니다. 영어 편지와 영어 알파벳의 해당 위치입니다.

>>> import string
>>> dict1 = {value: (int(key) + 1) for key, value in 
enumerate(list(string.ascii_lowercase))}
>>> dict1
{'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4, 'g': 7, 'f': 6, 'i': 9, 'h': 8, 
'k': 11, 'j': 10, 'm': 13, 'l': 12, 'o': 15, 'n': 14, 'q': 17, 'p': 16, 's': 
19, 'r': 18, 'u': 21, 't': 20, 'w': 23, 'v': 22, 'y': 25, 'x': 24, 'z': 26}
>>> 

여기에 열거를 사용하여 목록에 알파벳과 색인 목록을 얻고 알파벳과 지수를 교환하여 사전의 키 값 쌍을 생성합니다.

그것이 당신에게 사전 comp에 대한 좋은 아이디어를 제공하고, 코드를 컴팩트하게 만들기 위해 더 자주 사용하도록 격려하기를 바랍니다.

이 시도,

def get_dic_from_two_lists(keys, values):
    return { keys[i] : values[i] for i in range(len(keys)) }

두 개의 목록이 있다고 가정합니다 국가 그리고 수도

country = ['India', 'Pakistan', 'China']
capital = ['New Delhi', 'Islamabad', 'Beijing']

그런 다음 두 목록에서 사전을 만듭니다.

print get_dic_from_two_lists(country, capital)

출력은 다음과 같습니다.

{'Pakistan': 'Islamabad', 'China': 'Beijing', 'India': 'New Delhi'}

다른 예를 던지기 위해. 다음 목록이 있다고 상상해보십시오.

nums = [4,2,2,1,3]

그리고 키가 색인이고 값이 목록의 요소 인 DICT로 바꾸고 싶습니다. 다음 코드 줄로 그렇게 할 수 있습니다.

{index:nums[index] for index in range(0,len(nums))}
>>> {k: v**3 for (k, v) in zip(string.ascii_lowercase, range(26))}

Python 지원 dict 함축,을 표현할 수 있는 창조의 사전을 사용하여 런타임 마찬가지로 간결한 구문입니다.

사전해 형{키:값(key,value)에서 반복 가능한}.이 구문에 소개되었 Python3 백 포트로 Python2.7,그래서 당신은 그것을 사용하실 수 있습의 버전에 관계없이 파이썬은 당신이 필요로 찾을 수 있습니다.

정규 예 두 가지 목록을 만드는 사전 항목에서 각각의 위치에서 첫 번째 목록이 항목에 해당 위치에서 두 번째 목록된 값으로 설정합니다.

Zip 기능을 사용되는 내부 이해 반환 반복기의 튜플,각 요소에서 행 촬영에서 동일한 위치에서 각각의 입력 iterables.위의 예제에서는 반환되는 반복기를 포함 튜플("a",1),("b",2),etc.

출력:

{'i':512,'e':64,''o:2744,'h':343,'l':1331,'s':5832,'b':1,'w':10648,'c':8,'x':12167,'y':13824,'t':6859,'p':3375,'d':27,'j':729,'a':0,'z':15625,'f':125,'q':4096,'u':8000,'n':2197,'m':1728,'r':4913,'k':1000,'g':216,'v':9261}

이 코드는 사용할 수있는 다른 값을 가진 여러 목록에 대한 목록 이해력을 사용하여 사전을 만듭니다. pd.DataFrame()

#Multiple lists 
model=['A', 'B', 'C', 'D']
launched=[1983,1984,1984,1984]
discontinued=[1986, 1985, 1984, 1986]

#Dictionary with list comprehension
keys=['model','launched','discontinued']
vals=[model, launched,discontinued]
data = {key:vals[n] for n, key in enumerate(keys)}

enumerate 통과합니다 n 에게 vals 각각 일치합니다 key 목록과 함께

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top