훨씬 큰 dicts에 대해 다음을 수행하는 더 빠른 방법이 있습니까? 갔지으로 액세스Python에서 빠른 기본 별칭 찾기
는aliases = {
'United States': 'USA',
'United Kingdom': 'UK',
'Russia': 'RUS',
}
if countryname in aliases: countryname = aliases[countryname]
훨씬 큰 dicts에 대해 다음을 수행하는 더 빠른 방법이 있습니까? 갔지으로 액세스Python에서 빠른 기본 별칭 찾기
는aliases = {
'United States': 'USA',
'United Kingdom': 'UK',
'Russia': 'RUS',
}
if countryname in aliases: countryname = aliases[countryname]
"in"은 사전의 경우 0 (1)이므로 해결책은 문제가 없습니다.
당신은 타이핑 저장하려면이 같은 뭔가를 할 수 :
countryname = aliases.get(countryname, countryname)
을 (하지만보다 읽기 더 쉽게 코드를 찾을 수)는 속도에 관해서
을, 어떤 솔루션은 최고입니다 대다수의 '히트'또는 '미스'가 있을지 여부에 달려 있습니다. 하지만 차이가있을 때는 아마 나노초 범위가 될 것입니다.
부품 점수 때문에 올린 횟수는 안타 수 또는 미스 수에 따라 다릅니다. – Mark
목록이 메모리에 들어가면 dicts가 가장 빠른 방법입니다.
countryname = aliases.get(countryname, countryname)
(는 사전에없는 경우 변경 COUNTRYNAME을 떠날 것이다), 또는 :
try:
countryname = aliases[countryname]
except KeyError:
pass
S.Mark가 지적한 것처럼, 당신도 함께 일 할 것이 조회를하고있다
사전이 매우 크고 많은 수표가 일치하는 것을 찾지 못할 것으로 예상되는 경우 Bloom filter 또는 파생물 중 하나를 고려하여 가양 성을 허용 할 수 있습니다.
키를 정렬하거나 파생 된 값을 가질 수 있으므로 bisection 또는 다른 root-finding 알고리즘을 구현할 수 있습니다.
먼저, 파이썬이 사전 검색을 구현하는 방법을 정확히 파악할 것입니다. 따라서 휠을 다시 발명하는 것이 아닙니다.
또한 순수한 Python 구현은 많은 반복이 필요하다면 상당히 느릴 수 있습니다. 진정으로 최적화하려면 Cython, Numpy 또는 F2Py를 고려하십시오.
(국가 이름만을 다루는 경우 내 제안을 보증 할만큼 충분히 큰 매핑을 다루지 않는다고 생각합니다.)하지만 일종의 맞춤법 검사를 수행 할 경우, 그때 ..
행운을 빈다.
큰 dicts가 빠릅니다. –