저는 Python 목록 이해 구문을 좋아합니다.
사전을 만드는 데에도 사용할 수 있습니까? 예를 들어 키와 값 쌍을 반복하면 다음과 같습니다.
mydict = {(k,v) for (k,v) in blah blah blah} # doesn't work
질문자 :flybywire
저는 Python 목록 이해 구문을 좋아합니다.
사전을 만드는 데에도 사용할 수 있습니까? 예를 들어 키와 값 쌍을 반복하면 다음과 같습니다.
mydict = {(k,v) for (k,v) in blah blah blah} # doesn't work
{key: value for (key, value) in iterable}
참고: 이것은 Python 3.x(및 2.7 이상)용입니다. 이전에 Python 2.6 및 이전 버전에서 dict
내장은 반복 가능한 키/값 쌍을 수신할 수 있으므로 목록 이해 또는 생성기 표현식을 전달할 수 있습니다. 예를 들어:
dict((key, func(key)) for key in keys)
간단한 경우에는 이해가 전혀 필요하지 않습니다 ...
dict
를 직접 호출하기만 하면 됩니다. 1) consumed from any iterable yielding pairs of keys/vals dict(pairs) 2) "zip'ped" 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의 답변을 참조하십시오.
사실, iterable이 이미 어떤 종류의 매핑을 이해하고 있다면 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}
그들을 압축 !
Python에서 목록 이해를 사용하여 사전 만들기
저는 Python 목록 이해 구문을 좋아합니다.
사전을 만드는 데에도 사용할 수 있습니까? 예를 들어 키와 값 쌍을 반복하면 다음과 같습니다.
mydict = {(k,v) for (k,v) in blah blah blah}
"dict comprehension"이라는 문구를 찾고 있습니다. 실제로는 다음과 같습니다.
mydict = {k: v for k, v in iterable}
blah blah blah
가 2-튜플의 이터러블이라고 가정하면 - 정말 가깝습니다. 다음과 같은 "blahs"를 만들어 보겠습니다.
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'}
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로 나눌 수 있는지 테스트하고 있습니다.
Python 버전 >= 2.7인 경우 다음을 수행합니다.
d = {i: True for i in [1,2,3]}
Python 버전 < 2.7 (RIP, 2010년 7월 3일 - 2019년 12월 31일) , 다음을 수행하십시오.
d = dict((i,True) for i in [1,2,3])
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)}
다음은 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} >>>
여기서 enumerate를 사용하여 목록에서 알파벳 목록과 해당 인덱스를 가져오고 사전에 대한 키 값 쌍을 생성하기 위해 알파벳과 인덱스를 교체하는 것을 주목하십시오.
사전 구성 요소에 대한 좋은 아이디어를 제공하고 더 자주 사용하여 코드를 압축할 수 있기를 바랍니다.
이 시도,
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'}
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)} #Convert dict to dataframe df=pd.DataFrame(data) display(df)
enumerate
는 n
을 vals에 key
를 해당 목록과 vals
다른 예를 들자면. 다음 목록이 있다고 상상해보십시오.
nums = [4,2,2,1,3]
키가 인덱스이고 값이 목록의 요소인 사전으로 변환하려고 합니다. 다음 코드 줄로 그렇게 할 수 있습니다.
{index:nums[index] for index in range(0,len(nums))}
>>> {k: v**3 for (k, v) in zip(string.ascii_lowercase, range(26))}
Python은 유사한 간결한 구문을 사용하여 런타임에 사전 생성을 표현할 수 있는 사전 이해를 지원합니다.
사전 이해는 {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}
네, 가능합니다. 파이썬에서는 List, Set, Dictionary 등에서 Comprehension을 사용할 수 있습니다. 이렇게 작성하면 됩니다.
mydict = {k:v for (k,v) in blah}
조건문 및 루프를 사용한 사전 이해의 또 다른 자세한 예:
parents = [father, mother] parents = {parent:1 - P["mutation"] if parent in two_genes else 0.5 if parent in one_gene else P["mutation"] for parent in parents}
각 쌍에 대해 새 사전을 만들고 이전 사전과 병합할 수 있습니다.
reduce(lambda p, q: {**p, **{q[0]: q[1]}}, bla bla bla, {})
분명히 이 접근 방식에는 functools
에서 reduce
가 필요합니다.
출처 : http:www.stackoverflow.com/questions/1747817/create-a-dictionary-with-list-comprehension
match_parent와 fill_parent의 차이점은 무엇입니까? (0) | 2022.03.07 |
---|---|
JavaScript에서 날짜 형식 지정에 대한 문서는 어디에서 찾을 수 있습니까? (0) | 2022.03.07 |
Git 리포지토리에서 .DS_Store 파일을 제거하려면 어떻게 해야 합니까? (0) | 2022.03.04 |
MySQL에서 AUTO_INCREMENT를 재설정하는 방법 (0) | 2022.03.04 |
C++에서 가상 함수가 필요한 이유는 무엇입니까? (0) | 2022.03.04 |