Підрахунок кількості ключових слів у словнику python


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())
задавав

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.
Грем

0

Деякі зміни були внесені в розміщенні відповіді UnderWaterKremlin, щоб зробити це підтвердженням python3. Дивовижний результат нижче як відповідь.

Характеристики системи:

  • пітон = 3,7,4,
  • conda = 4,8,0
  • 3,6 ГГц, 8 ядер, 16 Гб.
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().

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.