답변:
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의 답변을 참조하십시오 .
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로 나눌 수 있는지 테스트하고 있습니다.
dict comprehension을 사용한 사전 작성의 또 다른 예는 다음과 같습니다.
여기서 내가 할 일은 각 쌍이있는 알파벳 사전을 만드는 것입니다. 영문자와 영어 알파벳의 해당 위치입니다.
>>> 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에 대한 좋은 아이디어를 제공하고 코드를 압축하기 위해 더 자주 사용하도록 권장합니다.
d = {k: v+1 for v, k in enumerate(string.ascii_lowercase)}
이 시도,
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'}
>>> {k: v**3 for (k, v) in zip(string.ascii_lowercase, range(26))}
파이썬은 dict comprehensions을 지원하여 런타임에 유사한 간결한 구문을 사용하여 사전 작성을 표현할 수 있습니다.
사전 이해는 {key : value for (key, value) in iterable} 형식을 취합니다. 이 구문은 Python 3에서 도입되었으며 Python 2.7까지 백 포트되었으므로 설치 한 Python 버전에 관계없이 사용할 수 있습니다.
표준 예제는 두 개의 목록을 가져 와서 첫 번째 목록의 각 위치에있는 항목이 키가되고 두 번째 목록의 해당 위치에있는 항목이 값이되는 사전을 작성하는 것입니다.
이 이해에 사용되는 zip 함수는 튜플의 반복자를 반환합니다. 여기서 튜플의 각 요소는 각 입력 반복 가능 항목의 동일한 위치에서 가져옵니다. 위의 예에서 반환 된 반복자는 튜플 (“a”, 1), (“b”, 2) 등을 포함합니다.
산출:
{ '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
collections.Counter
물건을 세는 데 필요한 특수한 유형의 사전 : 사전을 사용하여 목록의 항목 수