Подсчет количества ключевых слов в словаре в python

235

У меня есть список слов в словаре со значением = повторение ключевого слова, но мне нужен только список отдельных слов, поэтому я хотел подсчитать количество ключевых слов. Есть ли способ подсчитать количество ключевых слов или есть другой способ поиска отдельных слов?

Дэн
источник

Ответы:

411
len(yourdict.keys())

или просто

len(yourdict)

Если вам нравится считать уникальные слова в файле, вы можете просто использовать setи делать как

len(set(open(yourdictfile).read().split()))
ТЫ
источник
4
Я знаю, что этот пост старый, но мне было любопытно. Это самый быстрый метод? Или: это достаточно быстрый метод для больших словарей?
theJollySin
2
Оба len(yourdict.keys())и len(yourdict)O (1). Последний немного быстрее. Смотрите мои тесты ниже.
Чи-Сюань Йен
5
Я хотел бы отметить, что вы также можете перейти к значениям (я знаю, что вопрос не задавался) сlen(yourdict.values())
ntk4
29

Количество различных слов (т.е. количество записей в словаре) можно найти с помощью len()функции.

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

Чтобы получить все отдельные слова (то есть ключи), используйте .keys()метод.

> list(a.keys())
['foo', 'bar']
kennytm
источник
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)
UnderwaterKremlin
источник
2

Если вопрос касается подсчета количества ключевых слов, то рекомендую что-то вроде

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

в главной функции есть что-то, что проходит через данные и передает значения функции countertoccurrence

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().

ZF007
источник