2013-10-28 1 views
-1

У меня есть текстовый документ. Я хочу скомпилировать словарь (DICT) из этого документа. Словарь должен содержать только все слова, начинающиеся с буквы верхнего регистра. (Не имеет значения, если это слово в начале предложения)Как положить только слова, которые начинаются с прописной буквы в словаре?

До сих пор я сделал это: Кстати, я должен использовать цикл и разделить функции для этой задачи

DICT = {} 

for line in lines: # lines is the text without line breaks 
    words = line.split(" ") 
    for word in words: 
     if word in DICT: 
      DICT[word] += 1 
     else: 
      DICT[word] = 1 

Но я полагаю, что это только делает словарь из всех слов в моем тексте.

  1. Как выбрать слова, начинающиеся с заглавной буквы?
  2. Как проверить правильность написания словаря?
+0

как проверить? Вы пишете единичный тест для своего кода. –

+0

Я новичок в этом. Я не знаю, как написать код «для извлечения первой буквы с заглавной буквы» – pajamas

+0

@ user2799617: Здесь много усилий, не нужно быть таким .. cantankerous. Вы вообще учитесь на прошлых уроках? –

ответ

1

Используйте s.isupper() method, чтобы проверить, является ли строка прописной. Вы можете использовать индексирование, чтобы выбрать только первый символ.

Таким образом, чтобы проверить, если первый символ в верхнем регистре, используйте:

if word[0].isupper(): 

Если вы хотите быстро и вещий подход, использовать collections.Counter() object сделать подсчет, и разделение на всех пробельных удалить : новые строки

from collections import Counter 

counts = Counter() 

for line in lines: # lines is the text without line breaks 
    counts.update(word for word in line.split() if word[0].isupper()) 

Здесь word.split() без аргументов расщепляется на всех пробелов, удаление любых пробелов в начале и в конце строки (включая символ новой строки).

+0

Это хороший, но мы в начале семестра, и я предполагаю, что коллекции не являются темой, пока;).Поэтому будьте осторожны, когда вы отправляете этот ответ :). – OBu

0
from itertools import groupby 
s = "QWE asd ZXc vvQ QWE" 
# extract all the words with capital first letter 
caps = [word for word in s.split(" ") if word[0].isupper()] 
# group and count them 
caps_counts = {word: len(list(group)) for word, group in groupby(sorted(caps))} 

print(caps_counts) 

groupby может быть менее эффективным, чем ручное зацикливание, поскольку это требует сортировки итерируемого выполняет сортировку, и сортировка представляет собой О (NlogN) комплекс, над O (N) compelxity в случае ручного зацикливания. Но этот вариант немного более «питоновский».

0

Вы можете проверить, начинается ли слово с прописной буквы, используя указанную функцию isupper и включить это перед оператором if else.

if word[0].isupper(): 
    if word in DICT: 
     DICT[word] += 1 
    else: 
     DICT[word] = 1 

Чтобы затем проверить это, вы можете использовать метод any:

any(word[0].islower() for word in DICT.keys()) 

Который должен вернуться False. Вы можете выбрать asset.

Чтобы сделать все немного лучше, вы можете использовать defaultdict

from collection import defaultdict 

DICT = defaultdict(int) 
for line in lines: 
    words = line.split(" ") 
    for word in words: 
     if (word in DICT) and (word[0].isupper()): 
      DICT[word] += 1 

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

  • Нет связанных вопросов^_^