2013-10-28 48 views
-1

我有一個文本文件。我想從這個文檔編譯一本字典(DICT)。字典只能包含所有以大寫字母開頭的單詞。 (這並不重要,如果這個詞在句子的開頭)如何只在字典中以大寫字母開頭的單詞?

到現在爲止我已經做到了這一點: 順便說一句,我必須使用for循環這個問題

分裂功能
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:有很多的心血在這裏,沒有必要如此..脾氣古怪。你從過去的課程中學到了什麼? –

回答

1

使用s.isupper() method來測試字符串是否爲大寫字母。您可以使用索引來選擇只是的第一個字符。

因此,爲了測試是否第一字符是大寫的,使用方法:

if word[0].isupper(): 

如果你想有一個快速和Python的方法,使用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可能比手動循環效率較低,和排序是O(NlogN)絡合物,在手動循環的情況下,在O(N)compelxity。但是這個變種有點「pythonic」。

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 
相關問題