Как использовать l oop, чтобы получить частоту слов объекта списка и сохранить в объекте dict? - PullRequest
0 голосов
/ 25 мая 2020

У меня есть список с именем data и объект dict с именем word_count, перед преобразованием частоты в уникальные целые числа я хочу вернуть объект dict word_count (ожидаемый формат: {'marjori': 1,'splendid':1...}), а затем отсортировать частота.

data = [['marjori',
 'splendid'],
 ['rivet',
 'perform',
 'farrah',
 'fawcett']]

def build_dict(data, vocab_size = 5000):

    word_count = {}
    for w in data:
        word_count.append(data.count(w)) ????
    #print(word_count)

    # how can I sort the words to make sorted_words[0] is the most frequently appearing word and sorted_words[-1] is the least frequently appearing word.

    sorted_words = ??

Я новичок в Python, может кто мне поможет, заранее спасибо. (Я хочу использовать только библиотеку numpy и для l oop.)

Ответы [ 2 ]

1 голос
/ 25 мая 2020

Последняя часть вашего кода непонятна, но если вы хотите только подсчитать слова и вставить их в словарь и отсортировать по частоте в порядке убывания, я бы предложил использовать defaultdict и реализовать его как это:

data = ['marjori',
 'splendid',
 'rivet',
 'farrah',
 'perform',
 'farrah',
 'fawcett']
from collections import defaultdict

def build_dict(data, vocab_size = 5000):
    """Construct and return a dictionary mapping each of the most frequently appearing words to a unique integer."""

    word_count = defaultdict(int) # A dict storing the words that appear in the reviews along with how often they occur
    for w in data:
        word_count[w]+=1
    #print(word_count)

    # how can I sort the words to make sorted_words[0] is the most frequently appearing word and sorted_words[-1] is the least frequently appearing word.

    sorted_words = {k: v for k, v in sorted(word_count.items(), key=lambda item: item[1])}

    return sorted_words

build_dict(data)

Вывод:

{'farrah': 2,
 'fawcett': 1,
 'marjori': 1,
 'perform': 1,
 'rivet': 1,
 'splendid': 1}
1 голос
/ 25 мая 2020

Для каждого слова вам нужно создать запись dict, если она еще не существует, или добавить 1 к ее значению, если она существует:

 word_count = dict()
        for w in data:
            if word_count.get(w) is not None:
                word_count[w] += 1
            else:
                word_count[w] = 1

Затем вы можете отсортировать словарь по значению :

word_count = {k: v for k, v in sorted(word_count.items(), key=lambda item: item[1], reverse=True)}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...