2016-03-03 2 views
2

Так я сделал функциюPython, Возьми словарь и произвести список с (словами> 1, наиболее употребительными словами, длинными словами)

def word_count(string): 
    my_string = string.lower().split() 
    my_dict = {} 
    for item in my_string: 
     if item in my_dict: 
      my_dict[item] += 1 
     else: 
      my_dict[item] = 1 
    print(my_dict) 

так, что это делает то, что он принимает строку, разбивает его , и производит словарь, ключ которого является словом, а значение - сколько раз оно появляется.

Хорошо, так что им пытаются сделать сейчас, чтобы сделать функцию, которая принимает результаты этой функции, и выдает список в следующем Формат-

((список слов длиной более 1 письма) , (список наиболее часто встречающихся слов), (список слов с самой длинной длиной))

также, например, позволяет сказать, что два слова появились 3 раза, и оба слова длиной 6 букв, оно должно включать оба слова в как списки наиболее часто встречающихся, так и наиболее длинных.

Таким образом, это была моя попытка до сих пор в решении этой проблемы

def analyze(x): 
    longer_than_one= [] 
    most_frequent= [] 
    longest= [] 
    for key in x.item: 
     if len(key) >1: 
      key.append(longer_than_one) 
    print(longer_than_one) 

так, что я пытался сделать здесь, сделать серию для и если петли, что дописать в списки в зависимости от независимо от того, соответствуют ли элементы критериям, однако у меня возникли следующие проблемы: -

1 - Как я могу перебирать словарь без ошибок?

2- я не могу выяснить способ для подсчета наиболее частые слова (я имел в виду, чтобы добавить ключи с максимальными значениями)

3- я не могу найти способ, чтобы добавить только те слова, которые являются самый длинный в словаре (я думал об использовании len (key), но он сказал ошибку)

Если это поможет, я буду работать в Spyder Anaconda с помощью Python 3.5.1, любые советы будут оценены!

+0

Это домашнее задание, основанное на некоторых предположениях, или вам нужны обычные словари, и особенно хотите, чтобы этот результат был для какой-то собственной проблемы? Я подозреваю, что некоторые проблемы [XY] (http://xyproblem.info/) здесь. Также вы можете посмотреть библиотеку python: '' collections.Counter''. – MSeifert

+0

Вам нужно исправить отступы. Все строки кода должны быть смещены на 4 пробела для правильной форматирования. Попробуйте использовать 'ctrl-k' для автоматического форматирования. – DaveBensonPhillips

+0

Чтобы исправить отступ, примите изменение от AlokThakur. – zondo

ответ

2

Вы действительно пытаетесь изобрести колесо.

Представьте, что у вас есть list_of_words, который, ну, список строк.

Чтобы получить наиболее частое слово, используйте Counter:

from collections import Counter 
my_counter = Counter(list_of_words) 

Для сортировки списка по длине:

sorted_by_length = sorted(list_of_words, key=len) 

Чтобы получить список слов дольше, чем одно письмо, вы можете просто использовать ваш отсортированный список или создать новый список только с такими данными:

longer_than_one_letter = [word for word in list_of_words if len(word) > 1] 

Чтобы получить ваш выход в требуемом формате, просто используйте все вышеперечисленное.

0

1) Чтобы перебрать словарь, который вы можете использовать:

for key in my_dict: 

или если вы хотите, чтобы получить ключ и значение в то же время использование:

for key, value in my_dict.iteritems(): 

2) Чтобы найти наиболее частые слова, которые вы должны предполагать, что первое слово наиболее часто встречается, тогда вы смотрите на следующее количество слов, и если это то же самое, вы добавляете его в свой список, если это меньше, просто пропустите его, если это больше - очистите список и предположите что это чаще всего

3) В значительной степени то же самое, что и 2. Предположим, что ваш первый самый длинный вариант, если следующий, если длина равна текущему максимальному, просто добавляется к списку, если это меньше, пропустите его, если это более ясно и предположите, что это ваш макс.

Я не добавлять код, так как лучше, если вы пишете свой собственный, чтобы узнать что-то

0

Есть другие хорошие ответы на ваш вопрос, но я хотел бы, чтобы помочь вам в вашей попытке, я сделали несколько изменений в коде, чтобы сделать его Рабоче

def analyze(x): 
     longer_than_one= [] 
     most_frequent= [] 
     longest= [] 
     for key in x: 
      if len(key) >1: 
       longer_than_one.append(key) 
     print(longer_than_one) 

кажется, вы не пытались в течение 2-го и 3-го использования.

1

Большинство ваших проблем решается или становится проще, если вы используете Counter.

Дать word_count с Counter:

>>> from collections import Counter 
>>> def word_count(string): 
...  return Counter(string.split()) 

Демо:

>>> c = word_count('aa aa aa xxx xxx xxx b b ccccccc') 
>>> c 
Counter({'aa': 3, 'xxx': 3, 'b': 2, 'ccccccc': 1}) 
>>> c['aa'] 
3 

Предложен метод Countermost_common помогает получать наиболее частые слова:

>>> c.most_common() 
[('aa', 3), ('xxx', 3), ('b', 2), ('ccccccc', 1)] 
>>> c.most_common(1) 
[('aa', 3)] 
>>> max_count = c.most_common(1)[0][1] 
>>> [word for word, count in c.items() if count == max_count] 
['aa', 'xxx'] 

Вы можете получить сами слова wi го c.keys()

>>> c.keys() 
['aa', 'xxx', 'b', 'ccccccc'] 

и список слов с самой длинной длиной таким образом:

>>> max_len = len(max(c, key=len)) 
>>> [word for word in c if len(word) == max_len] 
['ccccccc'] 
0

Сначала проверьте collections.Counter:

import collections 

word_counts = collections.Counter(your_text.split()) 

Учитывая, что вы можете использовать его метод .most_common для самых распространенных слов. Он создает список (word, its_count) кортежей.

Чтобы обнаружить самые длинные слова в словаре, вы можете сделать:

import heapq 

largest_words= heapq.nlargest(N, word_counts, key=len) 

N является подсчет крупнейших слов, которые вы хотите.Это работает, потому что по умолчанию итерация по dict производит только ключи, поэтому сортирует их по длине слова (key=len) и возвращает только N.

Но вы, кажется, упали глубоко в Python, не пройдя учебник. Это домашнее задание?

Смежные вопросы