파이썬에서 사전의 키워드 수 계산


234

값 = 키워드 반복이있는 사전에 단어 목록이 있지만 고유 단어 목록 만 원하므로 키워드 수를 세고 싶었습니다. 키워드 수를 세는 방법이 있거나 다른 단어를 찾아야하는 다른 방법이 있습니까?

답변:


410
len(yourdict.keys())

아니면 그냥

len(yourdict)

파일에서 고유 한 단어를 세고 싶다면 사용 set하고 좋아할 수 있습니다.

len(set(open(yourdictfile).read().split()))

4
이 게시물이 오래되었다는 것을 알고 있지만 궁금했습니다. 이것이 가장 빠른 방법입니까? 또는 : 그것은이다 큰 사전에 합리적으로 빠른 방법은?
theJollySin

2
모두 len(yourdict.keys())len(yourdict)O (1)이다. 후자는 약간 더 빠릅니다. 아래의 테스트를 참조하십시오.
Chih-Hsuan Yen

5
나는 당신도 (내가 질문을 물어 보지 않았다 알고) 값 갈 수 있습니다 싶습니다len(yourdict.values())
ntk4

29

고유 한 단어 수 (예 : 사전의 항목 수)는 len()함수를 사용하여 찾을 수 있습니다 .

> a = {'foo':42, 'bar':69}
> len(a)
2

구별되는 단어 (예 : 키)를 모두 얻으려면이 .keys()방법을 사용하십시오 .

> list(a.keys())
['foo', 'bar']

5

len()사전에서 직접 호출 하면 반복자를 작성 d.keys()하고 호출 하는 것보다 빠르지 만 len()프로그램의 다른 작업과 비교할 때 속도는 무시할 수 있습니다.

d = {x: x**2 for x in range(1000)}

len(d)
# 1000

len(d.keys())
# 1000

%timeit len(d)
# 41.9 ns ± 0.244 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

%timeit len(d.keys())
# 83.3 ns ± 0.41 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

2

질문이 키워드 수를 세는 것에 관한 것이라면 다음과 같은 것이 좋습니다.

def countoccurrences(store, value):
    try:
        store[value] = store[value] + 1
    except KeyError as e:
        store[value] = 1
    return

주 함수에는 데이터를 반복하고 값을 countoccurrences 함수에 전달하는 무언가가 있습니다.

if __name__ == "__main__":
    store = {}
    list = ('a', 'a', 'b', 'c', 'c')
    for data in list:
        countoccurrences(store, data)
    for k, v in store.iteritems():
        print "Key " + k + " has occurred "  + str(v) + " times"

코드 출력

Key a has occurred 2 times
Key c has occurred 2 times
Key b has occurred 1 times

2
PEP 8 명명 규칙에 따라 그 countoccurrences()대신 사용해야합니다 count_occurrences(). 또한를 가져 오는 경우 collections.Counter훨씬 더 좋은 방법이 있습니다 from collections import Counter; store = Counter(); for data in list: store[list] += 1.
Graham

0

게시 된 답변 UnderWaterKremlin에서 python3 증거로 수정되었습니다. 답으로 아래 놀라운 결과.

시스템 사양 :

  • 파이썬 = 3.7.4,
  • 콘다 = 4.8.0
  • 3.6GHz, 8 코어, 16GB
import timeit

d = {x: x**2 for x in range(1000)}
#print (d)
print (len(d))
# 1000

print (len(d.keys()))
# 1000

print (timeit.timeit('len({x: x**2 for x in range(1000)})', number=100000))        # 1

print (timeit.timeit('len({x: x**2 for x in range(1000)}.keys())', number=100000)) # 2

결과:

1) = 37.0100378

2) = 37.002148899999995

따라서 len(d.keys())현재 사용하는 것보다 빠릅니다 len().

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.