코드가 둔각이며, 휴식 그들.
또한 한 줄자를 사용하지 않으려는 경우 입력 속도가 다른 것보다 계산 속도가 빠릅니다.
당신이 그럼 다운을 깰 수 있도록
을 반복하는지 알 수 있습니다. 모든 요소에 대한 목록의 반복을 사전을 생성하는 지능형리스트의 복잡한 인쇄에서
, 우리는 다음을 참조하십시오
그 자체가 단순화 될 수있다 루프처럼 보이는
print([{i[0] : i[1]} for i in wn.synset('person.n.01').hypernym_distances()])
. 먼저 synset을 유지하기 위해 변수를 설정하십시오. 이제
person = wn.synset('person.n.01')
의이 person.hypernym_distances()
반환 무엇을 보자 :
이
>>> person.hypernym_distances()
{(Synset('person.n.01'), 0), (Synset('organism.n.01'), 1), (Synset('whole.n.02'), 3), (Synset('physical_entity.n.01'), 5), (Synset('causal_agent.n.01'), 1), (Synset('entity.n.01'), 3), (Synset('living_thing.n.01'), 2), (Synset('physical_entity.n.01'), 2), (Synset('entity.n.01'), 6), (Synset('object.n.01'), 4)}
person.hypernym_distances()
의 데이터 구조가 (난 당신이 몇 가지 synset을에 같은 작업을하려면 대신의 유일한 person.n.01
에 그것을 사용한다고 가정) 이미 첫 번째 요소가 상위 요소이고 두 번째 요소가 거리 인 튜플 집합입니다. 그리고 Synset('entity.n.01')
은 set
유형이므로 person.hypernym_distances()
에 한 번만 발생해야합니다.
튜플을 반복, 당신은 쉽게 그것을 튜플의 목록을 반복하여
>>> from nltk.corpus import wordnet as wn
>>> wn.synset('person.n.01')
Synset('person.n.01')
>>> person = wn.synset('person.n.01')
>>> person.hypernym_distances()
{(Synset('person.n.01'), 0), (Synset('organism.n.01'), 1), (Synset('whole.n.02'), 3), (Synset('physical_entity.n.01'), 5), (Synset('causal_agent.n.01'), 1), (Synset('entity.n.01'), 3), (Synset('living_thing.n.01'), 2), (Synset('physical_entity.n.01'), 2), (Synset('entity.n.01'), 6), (Synset('object.n.01'), 4)}
>>> for ss, count in person.hypernym_distances():
... print (ss,'\t', count)
...
Synset('person.n.01') 0
Synset('organism.n.01') 1
Synset('whole.n.02') 3
Synset('physical_entity.n.01') 5
Synset('causal_agent.n.01') 1
Synset('entity.n.01') 3
Synset('living_thing.n.01') 2
Synset('physical_entity.n.01') 2
Synset('entity.n.01') 6
Synset('object.n.01') 4
을 (Unpacking a list/tuple of pairs into two lists/tuples 및 How can I iterate through two lists in parallel? 참조) "압축 해제"할 수있는 루프에서 튜플/반복 가능 객체의 반복 가능한 포장 풀기 위와 같은 방법으로 추악한 (i[0], i[1]) for i in iterable_of_tuples
구문을 피할 수 있습니다. 대신 (a,b) for a,b in iterable_of_tuples
을 수행하십시오. DICT 이해 대
목록
당신이 키가 synset이고 값이 카운트 경우 사전에 person.hypernym_distances()
에서 튜플을 넣어하려고하는 것 같다.
list comprehension
과 dictionary comprehension
사이에 오르면 실수가되는 것 같습니다. person.hypernym_distances()
에있는 모든 요소에 대해 새 사전을 만들 필요는 없습니다. 대신에, 나는 사전 이해가 당신이 찾고있는 무슨 생각 예 :
사실, 사전에 튜플
>>> {ss:count for ss, count in person.hypernym_distances()}
{Synset('object.n.01'): 4, Synset('whole.n.02'): 3, Synset('living_thing.n.01'): 2, Synset('organism.n.01'): 1, Synset('entity.n.01'): 6, Synset('person.n.01'): 0, Synset('causal_agent.n.01'): 1, Synset('physical_entity.n.01'): 2}
주조 목록 위의 사전은 튜플의 반복자에 주어진 원하는 경우
>>> dict(person.hypernym_distances())
{Synset('object.n.01'): 4, Synset('whole.n.02'): 3, Synset('living_thing.n.01'): 2, Synset('organism.n.01'): 1, Synset('entity.n.01'): 6, Synset('person.n.01'): 0, Synset('causal_agent.n.01'): 1, Synset('physical_entity.n.01'): 2}
도
,536,913를 참조하십시오 사전에 반복 가능한 캐스팅 튜플 당이 개 항목은 자동으로 키와 값으로 두 번째로 튜플의 첫 번째 항목을 설정합니다
네이티브 파이썬에는이 컨테이너를 처리 할 수있는 고성능 컨테이너 데이터 구조가 있으며 멋진 기능도 제공됩니다. https://docs.python.org/3/library/collections.html
StackOverflow에 오신 것을 환영합니다. https://stackoverflow.com/help/how-to-ask를 참조하십시오. 코드를 형식화하고 질문을 재현 할 수 있습니까? 네가 묻는 것이 불분명 한가? – alvas
확인 :) @alvas –